Tag: stringbuilder

在某些字符计数后拆分字符串

我需要一些帮助。 我正在使用包含exception详细信息的文本文件编写错误日志。 有了这个我希望我的堆栈跟踪细节写成如下所示,而不是直线,以避免用户滚动记事本的滚动条或让我们说在第100个字符,字符串将写入下一行。 我不知道如何实现这一目标。 提前致谢。 样品(这是我目前的直线输出) STACKTRACE: at stacktraceabcdefghijklmnopqrstuvwxyztacktraceabcdefghijklmnopqrswxyztacktraceabcdefghijk * *我想要的输出(字符串将在特定字符数后写入下一行) STACKTRACE: at stacktraceabcdefghijklmno pqrstuvwxyztacktraceabcdefgh ijklmnopqrswxyztacktraceabcd efghijk 我的代码 builder.Append(String.Format(“STACKTRACE:”)); builder.AppendLine(); builder.Append(logDetails.StackTrace);

字符串连接在C#中不安全,需要使用StringBuilder吗?

我的问题是: C#中的字符串连接是否安全? 如果字符串连接导致意外错误,并且使用StringBuilder替换该字符串连接会导致这些错误消失,那可能表示什么? 背景:我正在开发一个小命令行C#应用程序。 它接受命令行参数,执行稍微复杂的SQL查询,并将大约1300行数据输出到格式化的XML文件中。 我的初始程序总是在调试模式下正常运行。 但是,在发布模式下,它将获得大约第750个SQL结果,然后因错误而死亡。 错误是无法读取某一列数据,即使通过SqlDataReader对象的Read()方法刚刚返回true也是如此。 通过对代码中的所有操作使用StringBuilder来解决此问题,之前已经存在“string1 + string2”。 我不是在谈论SQL查询循环中的字符串连接,其中StringBuilder已经在使用中。 我在谈论代码中较早的两个或三个短字符串变量之间的简单连接。 我的印象是C#足够聪明,可以通过添加几个字符串来处理内存管理。 我错了吗? 或者这是否表明其他一些代码问题?

C#PInvoke out字符串声明

在C#PInvoke中,如何传递一个字符串缓冲区,以便C DLL填充它并返回? 什么是PInvoke宣言? C函数声明是 int GetData(char* data, int buflength); 在C#中,我已将其声明为 [DllImport(DllName)] static extern Int32 GetData([MarshalAs(UnmanagedType.LPStr)]StringBuilder receiveddata, Int32 buflen); 这是对的吗? 我像这样传递StringBuilder变量 int bufferLength = 32; StringBuilder data = new StringBuilder(bufferLength); int result = GetData(data, bufferLength); 我想知道它是否正确? 谢谢

StringBuilder中的正则表达式替换

我正在将文本文件的内容写入StringBuilder,然后我想使用正则表达式对StringBuilder中包含的文本执行许多查找/替换操作。 我遇到了一个问题,因为StringBuilder替换函数不能接受正则表达式参数。 我可以在普通字符串上使用Regex.Replace,但我认为这是低效的,因为需要在内存中创建字符串的两个副本,因为.net字符串是不可变的。 一旦我更新了文本,我打算将其写回原始文件。 什么是解决我问题的最佳和最有效的方法? 编辑 除了下面的答案,我发现以下问题也解释了我的问题 – 内存效率和性能的字符串替换净框架 IS-StringBuilder的替换,更高效的超字符串替换 在乜点,确实-使用-A-的StringBuilder-成为无意义,或-的开销

StringBuilder中最快的搜索方法

我有一个名为stb_Swap_Tabu的StringBuilder用于存储课程名称,我使用以下方法查找课程: stb_Swap_Tabu.ToString.Contains(“CourseName”) 就我而言,性能是最重要的问题。 有没有更快的方法?

是否有任何情况下Rope数据结构比字符串生成器更有效

与此问题相关,基于用户Eric Lippert的评论。 是否有任何情况下Rope数据结构比字符串生成器更有效? 有些人认为绳索数据结构在速度方面几乎从不比典型情况下的本地字符串或字符串构建器操作更好,所以我很想看到真实的情况,确实绳索更好。

C#Stringbuilder OutOfMemoryException

我写了以下function public void TestSB() { string str = “The quick brown fox jumps over the lazy dog.”; StringBuilder sb = new StringBuilder(); int j = 0; int len = 0; try { for (int i = 0; i < (10000000 * 2); i++) { j = i; len = sb.Length; sb.Append(str); } Console.WriteLine("Success ::" + […]

StringBuilder的容量如何变化?

当我有一个容量为5的空StringBuilder时,我写了“你好,世界!” 对它来说,C#标准是否指定了StringBuilder的新容量? 我有一个模糊的记忆,它是新字符串长度的两倍(以避免每个新附加字符串改变容量)。

用于字符串连接的StringBuilder抛出OutOfMemoryException

我们大多倾向于遵循上述最佳做法。 看看String vs StringBuilder 但是, 即使有足够的可用内存, StringBuilder也可能抛出OutOfMemoryException 。 它抛出OOMexception,因为它需要“连续的内存块”。 一些链接供参考StringBuilder OutOfMemoryException 而且还有更多…… 你们当中有多少人遇到这个问题或意识到你们做了什么来解决这个问题? 有什么我想念的吗? PS:我没有意识到这一点。 我已经改写了这个问题。 ***同样的事情与手动连接一起工作(我将validation这一点并更新SO)。 引起我担忧的另一件事是系统中有足够的内存。 这就是我在这里提出这个问题的原因,以检查是否有人遇到这个问题或者代码有什么严重错误。

将安全的SQL语句创建为字符串

我正在使用C#和.NET 3.5。 我需要生成并存储一些T-SQL插入语句,稍后将在远程服务器上执行。 例如,我有一个Employees数组: new Employee[] { new Employee { ID = 5, Name = “Frank Grimes” }, new Employee { ID = 6, Name = “Tim O’Reilly” } } 我需要最终得到一个字符串数组,如下所示: “INSERT INTO Employees (id, name) VALUES (5, ‘Frank Grimes’)”, “INSERT INTO Employees (id, name) VALUES (6, ‘Tim O”Reilly’)” 我正在查看一些使用String.Format创建insert语句的代码,但这感觉不对。 我考虑使用SqlCommand(希望做这样的事情 ),但它没有提供将命令文本与参数组合的方法。 仅仅替换单引号并构建字符串就足够了吗? string.Format(“INSERT INTO […]