问题标签 [stringbuilder]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
3030 浏览

.net - 在什么时候使用 StringBuilder 变得微不足道或开销?

最近我发现自己对所有大小的字符串连接都使用了 StringBuilder,但是在最近的一次性能测试中,我换掉了同事的stringOut = string1 + "。" 用于 StringBuilder 的string2样式连接(在 10000x + 循环中使用,每次都更新 StringBuilder)只是为了看看它在次要连接中会有什么不同。

我发现,在性能测试的多次运行中,无论连接或 StringBuilder (重申这是针对小连接),变化都微不足道地更高或更低。

StringBuilder 对象的“更新”在什么时候否定了使用它的好处?

0 投票
4 回答
3384 浏览

vb.net - 返回 Stringbuilder 内容

我知道微不足道,但只是感兴趣

我有一个 stringbuilder 变量,我想返回它的内容,但如果它是空的,我想返回“|”,所以最好在比较语句中使用 stringbuilder.tostring,例如

还是最好将其转换为字符串并进行比较,即使这意味着加载一个新变量并为其分配字符串空间,例如

0 投票
5 回答
67435 浏览

.net - String.Join 与 StringBuilder:哪个更快?

一个关于将 a 格式化double[][]为 CSV 格式的问题中,有人建议usingStringBuilder会比String.Join. 这是真的?

0 投票
3 回答
6251 浏览

pinvoke - 使用 [Out] StringBuilder / LPTSTR 和多字节字符的 P/Invoke:乱码文本?


我正在尝试使用 P/Invoke 从非托管 DLL 中获取字符串(以及其他内容),但无论我尝试什么,该字符串都会出现乱码。

我不是本地 Windows 编码器,所以我不确定字符编码位。DLL 设置为使用“多字节字符集”,我无法更改(因为这会破坏其他项目)。我正在尝试添加一个包装函数来从一些现有的类中提取一些数据。有问题的字符串当前作为 CString 存在,我正在尝试将其复制到 LPTSTR,希望将其放入托管的 StringBuilder 中。

这是我所做的,我认为是最接近正确的(显然,我已经删除了不相关的部分):




非常感谢任何提示!谢谢!!!

0 投票
7 回答
33436 浏览

.net - StringWriter 或 StringBuilder

我应该使用其中一个或另一个之间有什么区别StringWriter以及StringBuilder何时使用?

0 投票
5 回答
18761 浏览

java - Java StringBuilder 和线程安全

我正在构建一个由多个部分组成的字符串,并且想要使用其中一个StringBufferStringBuilder这样做。从 Java 5 文档中,我认为这StringBuilder是最好的,但需要注意的是

的实例StringBuilder对于多线程使用是不安全的。

从这个陈述中,我明白我不应该有一个StringBuilder由多个线程共享的实例。但是这个案例呢:

在这里,函数中可能同时有多个线程,同时使用StringBuilder该类(例如,静态变量的并发访问,如果有的话),但每个线程都有自己单独的StringBuilder. 从文档中,我不能完全确定这是否算作多线程使用。

0 投票
9 回答
52249 浏览

c# - StringBuilder.Append 与 StringBuilder.AppendFormat

我想知道 StringBuilder 并且我有一个问题希望社区能够解释。

让我们忘记代码可读性,其中哪个更快,为什么?

StringBuilder.Append

StringBuilder.AppendFormat

0 投票
12 回答
84783 浏览

c# - 我们如何在 StringBuilder 中添加字符串?

我知道我们可以使用StringBuilder. 有没有一种方法可以预先添加字符串(即在字符串前面添加字符串),StringBuilder这样我们就可以保持StringBuilder提供的性能优势?

0 投票
8 回答
6657 浏览

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

我的问题是: C# 中的字符串连接安全吗?如果字符串连接导致意外错误,并且使用 StringBuilder 替换该字符串连接会导致这些错误消失,这可能表明什么?

背景:我正在开发一个小型命令行 C# 应用程序。它接受命令行参数,执行稍微复杂的 SQL 查询,并将大约 1300 行数据输出到格式化的 XML 文件中。

我的初始程序在调试模式下总是运行良好。但是,在发布模式下,它会得到大约第 750 个 SQL 结果,然后因错误而死。错误是无法读取某列数据,即使通过SqlDataReader 对象的Read() 方法刚刚返回true。

此问题已通过对代码中的所有操作使用 StringBuilder 来解决,以前存在“string1 + string2”。我不是在谈论 SQL 查询循环中的字符串连接,其中 StringBuilder 已经在使用中。我说的是代码前面两个或三个短字符串变量之间的简单连接。

我的印象是 C# 足够聪明,可以处理将几个字符串添加在一起的内存管理。我错了吗?或者这是否表明某种其他类型的代码问题?

0 投票
7 回答
1642 浏览

c# - C# 中的字符串连接与内部字符串

我知道这个问题已经完成,但我对此略有不同。一些人指出这是过早的优化,如果我只是为了实用性和实用性而要求,这是完全正确的。我的问题源于一个实际问题,但我仍然很好奇。


我正在创建一堆 SQL 语句来创建一个脚本(因为它将被保存到磁盘中)来重新创建一个数据库模式(很容易有数百个表、视图等)。这意味着我的字符串连接是仅附加的。根据 MSDN,StringBuilder 的工作原理是保留一个内部缓冲区(肯定是 char[])并将字符串字符复制到其中并根据需要重新分配数组。

但是,我的代码有很多重复的字符串(“CREATE TABLE [”、“GO\n”等),这意味着我可以利用它们被实习,但如果我使用 StringBuilder 则不能,因为它们每次都会被复制。唯一的变量本质上是表名​​,并且已经作为字符串存在于内存中的其他对象中。

据我所知,在读入我的数据并创建包含架构信息的对象之后,我的所有字符串信息都可以通过实习重用,是吗?

假设这样,那么字符串的 List 或 LinkedList 会不会更快,因为它们保留了指向实习字符串的指针?然后,只需调用一次 String.Concat() 即可对长度完全正确的整个字符串进行一次内存分配。

List 必须重新分配 string[] 的 interned 指针,而链表必须创建节点并修改指针,所以它们不是“免费”的,但如果我连接数千个 interned 字符串,那么它们看起来就像他们会更有效率一样。

现在我想我可以想出一些关于每个 SQL 语句的字符计数的启发式方法并计算每种类型并得到一个粗略的想法并预先设置我的 StringBuilder 容量以避免重新分配它的 char[] 但我必须以相当大的幅度过冲以减少重新分配的可能性。

因此,对于这种情况,获得单个连接字符串的速度最快:

  • 字符串生成器
  • 列表<string> 的实习字符串
  • LinkedList<string> 的实习字符串
  • 具有容量启发式的 StringBuilder
  • 还有什么?

作为一个单独的问题(我可能并不总是去磁盘)到上面:单个 StreamWriter 到输出文件会更快吗?或者,使用 List 或 LinkedList 然后将它们从列表中写入文件,而不是首先在内存中连接。

编辑: 根据要求,参考(.NET 3.5)到 MSDN。它说:“如果有可用空间,则将新数据附加到缓冲区的末尾;否则,分配一个新的更大的缓冲区,将原始缓冲区中的数据复制到新缓冲区,然后将新数据附加到新缓冲区缓冲。” 这对我来说意味着一个 char[] 被重新分配以使其更大(这需要将旧数据复制到调整大小的数组)然后追加。