【发布时间】:2011-03-28 10:01:11
【问题描述】:
在我的 .NET 程序中,我允许用户定义由业务逻辑计算的值的“字段”。这些字段具有位置和长度,因此它们都可以插入到给定索引处的单个输出字符串中。我还允许用户指定此输出字符串的默认内容。如果没有定义字段来替换给定位置,则输出默认字符
我的问题是,我怎样才能有效地做到这一点? StringBuilder 类有一个 Insert(int index, string value) 方法,但这每次都会延长输出字符串而不是覆盖它。我是否必须使用 StringBuilder[int index] 索引器一次设置每个字符,这是否效率低下?由于我将多次执行此操作,因此我希望它尽可能快。
谢谢。
【问题讨论】:
-
" 由于我将多次这样做,我希望它尽可能快 "。定义“很多”?每个按钮点击数千次?那么这是过早的优化。夜间批处理作业每小时数百万次?还有过早的优化(一个多小时的一百万次点击大约每秒 278 次)。如果这个字符串操作被证明是一个瓶颈,我会惊呆的。
-
没错,但如果可能的话,编写高效的代码仍然很好。我只是在检查我没有做一些非常低效的事情。作为 .NET 开发人员,您总是听说过糟糕的字符串操作会导致性能损失。该程序的核心实际上将用于多个项目。第一个涉及文件转换。输出文件包含基于输入文件生成的值。我相信每个输入文件可能包含数百甚至数千条记录。但是使用此代码的未来应用程序可能会有更重的工作负载。
-
您可能最好考虑将字段附加到流,而不是构建字符串并编写它。使用
System.IO.StringWriter,如果出于任何原因需要,您始终可以将输出作为字符串获取。 -
我实际上是在使用 StreamWriter 来输出文件。但是我使用 StringBuilder 来构建传递给 StreamWriter 的各个部分。
-
我很奇怪,并分析了 Split 与 StringBuilder 解决方案,Split-Zip 解决方案表现更好:) 这里是代码:pastebin.com/pKsaexWX
标签: .net string stringbuilder