Tag: stringbuilder

.NET StringBuilder预先填充了一行

我知道.NET中的System.Text.StringBuilder有一个AppendLine()方法,但是,我需要在StringBuilder的开头预先附加一行。 我知道你可以使用Insert()来附加一个字符串,但我似乎无法使用一行,是否有我可以使用的下一行字符? 我使用的是VB.NET,所以答案更可取,但C#中的答案也可以。

是否有人围绕StringBuilders或Streams实现了正则表达式和/或Xml解析器?

我正在建立一个压力测试客户端,它使用尽可能多的线程来锤击服务器并分析响应,客户可以集合。 我经常发现自己受到垃圾收集(和/或缺少垃圾收集)的限制,并且在大多数情况下,它归结为我实例化的字符串,只是将它们传递给Regex或Xml解析例程。 如果你反编译Regex类,你会在内部看到它使用StringBuilders来做几乎所有事情,但你不能把它传递给字符串构建器; 在开始使用私有方法之前,它有助于深入研究私有方法,因此扩展方法也不会解决它。 如果您想从System.Xml.Linq中的解析器中获取对象图,则处于类似情况。 这不是一个迂腐过度优化的案例。 我查看了StringBuilder问题和其他问题中的正则表达式替换 。 我还分析了我的应用程序以查看天花板的来源,并且使用Regex.Replace()现在确实在方法链中引入了大量开销,我试图以每小时数百万的请求命中服务器并检查错误和嵌入式诊断代码的XML响应。 我已经摆脱了限制吞吐量的所有其他低效率,并且当我不需要捕获组或反向引用时,我甚至通过扩展StringBuilder来进行通配符查找/替换,从而减少了大量的Regex开销。但在我看来,现在有人会自己包装一个自定义的StringBuilder(或更好的,基于Stream)的Regex和Xml解析实用程序。 好吧,如此咆哮,但我自己必须这样做吗? 更新:我找到了一个解决方法,将峰值内存消耗从几千兆字节降低到几百兆,所以我将其发布在下面。 我不是把它作为答案添加因为a)我一般不喜欢这样做,而且b)我仍然想知道是否有人花时间定制StringBuilder来做Regexes(或反之亦然)。 在我的情况下,我无法使用XmlReader,因为我正在摄取的流包含某些元素中的一些无效二进制内容。 为了解析XML,我必须清空这些元素。 我以前使用单个静态编译的Regex实例来进行替换,这就像疯了一样消耗内存(我正在尝试处理~300个10KB docs / sec)。 大幅减少消费的变化是: 我在CodeProject上的这篇StringBuilder Extensions文章中添加了代码,用于方便的IndexOf方法。 我添加了一个(非常)原始的WildcardReplace方法,允许每次调用一个通配符(*或?) 我用WildcardReplace()调用替换了正则表达式用法,以清空有问题的元素的内容 这是非常不合适的,仅在我自己的目的要求下进行测试; 我会让它更优雅和强大,但YAGNI和所有这一切,我很匆忙。 这是代码: /// /// Performs basic wildcard find and replace on a string builder, observing one of two /// wildcard characters: * matches any number of characters, or ? matches […]

从StringBuilder的末尾修剪空格而不调用ToString()。修剪()并返回到新的SB

什么是从StringBuilder的末尾调整空格而不调用ToString()的有效方法。修剪()并返回到新的SB new StringBuilder(sb.ToString().Trim()) 。

是否需要在StringBuilder中替换字符串之前进行检查(使用“Contains”或“IndexOf”等函数)?

在C#中是否有任何方法IndexOf或Contains。 以下是代码: var sb = new StringBuilder(mystring); sb.Replace(“abc”, “a”); string dateFormatString = sb.ToString(); if (sb.ToString().Contains(“def”)) { sb.Replace(“def”, “aa”); } if (sb.ToString().Contains(“ghi”)) { sb.Replace(“ghi”, “assd”); } 你可能已经注意到我一次又一次地使用ToString(),我想避免它,因为它每次都在创建新的字符串。 你能帮帮我怎样才能避免它?

使用GetPrivateProfileString读取所有ini文件值

我需要一种方法来读取StringBuilder变量中的ini文件的所有部分/键: [DllImport(“kernel32.dll”)] private static extern int GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName); … private List GetKeys(string iniFile, string category) { StringBuilder returnString = new StringBuilder(255); GetPrivateProfileString(category, null, null, returnString, 32768, iniFile); … } 在returnString中只是第一个键值! 如何一次性获取所有内容并将其写入StringBuilder和List? 谢谢您的帮助! 招呼leon22

ORA-01795:列表中的最大表达式数为1000

在c#中,我们正在为NHibernate构建一个包含“in语句”的查询。 表达式的数量超过5000.如果我执行查询,我会收到错误。 我需要找到一种方法来打破大型字符串构建器并将它们存储在字符串构建器数组中,并在需要时执行多个查询以获得所需的输出。 我们只有一个帐户拥有超过5000条记录,其余的都低于100.有人可以提出解决方法吗?

为什么StringBuilder.AppendLine不添加带有一些字符串的新行?

我正在尝试使用stringbuilder来创建一个字符串体,用于文本(而不是HTML)电子邮件。 但是有些行(我包含动态数据,不添加新行,但在某些行中,新行按预期工作)。 在使用stringbuilder类时是否存在基本的缺失,或者是否存在一些应该发生的更基本的过程? 在以下代码中: sbUser.AppendLine(“Please find below confirmation of your registration details. If any of these details are incorrect, please email someone@somewhere.com”); sbUser.AppendLine(); sbUser.AppendLine(“Selected event : ” + ContentPage.FetchByID(int.Parse(ddlEvent.SelectedValue)).PageTitle); sbUser.AppendLine(“Date of event : ” + thisEvent.EventStartDate.ToString(“dd MMM yyyy”)); sbUser.AppendLine(“==============================================================”); sbUser.AppendLine(); (ContentPage和thisEvent是使用Subsonic(v2)构建的自定义类.PageTitle是字符串的输出类型) 将此作为输出: Please find below confirmation of your registration details. If any of these details […]

字符串生成器与列表

我正在阅读包含数百万行的多个文件,并且我正在创建具有特定问题的所有行号的列表。 例如,如果特定字段留空或包含无效值。 所以我的问题是跟踪可能超过一百万行的数字列表最有效的日期类型。 使用String Builder,Lists或其他更有效的方法吗? 我的最终目标是输出一条消息,如“特定字段在1-32,40,45,47,49-51等处是空白的。所以在String Builder的情况下,我会检查以前的值,如果它是只有一个我会改变它从1到1-2如果它是多于一个将它用逗号分隔。使用List,我只是将每个数字添加到列表然后组合然后文件有已完全阅读。但在这种情况下,我可以有多个包含数百万个数字的列表。 这是我用于使用String Builder组合数字列表的当前代码: string currentLine = sbCurrentLineNumbers.ToString(); string currentLineSub; StringBuilder subCurrentLine = new StringBuilder(); StringBuilder subCurrentLineSub = new StringBuilder(); int indexLastSpace = currentLine.LastIndexOf(‘ ‘); int indexLastDash = currentLine.LastIndexOf(‘-‘); int currentStringInt = 0; if (sbCurrentLineNumbers.Length == 0) { sbCurrentLineNumbers.Append(lineCount); } else if (indexLastSpace == -1 && indexLastDash == -1) { […]

如何使用StringBuilder进行多个不区分大小写的替换

我有一个(大)模板,想要替换多个值。 替换需要不区分大小写。 还必须能够拥有模板中不存在的密钥。 例如: [TestMethod] public void ReplaceMultipleWithIgnoreCaseText() { const string template = “My name is @Name@ and I like to read about @SUBJECT@ on @website@, tag @subject@”; const string expected = “My name is Alex and I like to read about C# on stackoverflow.com, tag C#”; var replaceParameters = new List<KeyValuePair> { new KeyValuePair(“@name@”,”Alex”), […]

字符串在C#中没有变化时字符串的可变性?

如果字符串操作没有改变字符串的值,那么最终是否会创建新实例?例如; string str=”foo”; str+=””; 我知道C#中string和stringbuilder的区别。