清空一长串值得吗?

Is it worth the effort to empty a long string?

提问人:Parrotmaster 提问时间:10/25/2023 更新时间:10/25/2023 访问量:84

问:

我使用 StringBuilder 在 .NET 中编写 SQL 查询。 执行查询后,手动将字符串的内容设置为“”有意义吗?

我猜编译器已经完成了这项工作(可能只有在启用优化选项的情况下)。

C# .NET 字符串 生成器

评论

7赞 Tim Schmelter 10/25/2023
“我使用 StringBuilder 在 .NET 中编写 SQL 查询” 听起来您正在将参数连接到您的 sql 查询中。别这样!请改用参数化查询来防止 sql 注入。
3赞 Good Night Nerd Pride 10/25/2023
你没有给出足够的细节来给出明确的答案,但一般来说:不。让垃圾回收器处理它。
1赞 MakePeaceGreatAgain 10/25/2023
将任何内容设置为空甚至 null 不会在 GC 上执行任何操作,因此此处没有任何好处。
0赞 Tim Schmelter 10/25/2023
我想这是一个局部变量(应该是),那么根本没有理由清空它,因为 GC 无论如何都会清理它。将其设置为 null 也是无用的,该代码甚至会被运行时删除。StringBuilder
1赞 Charlieface 10/25/2023
听起来您应该更改连接字符串以面向不同的数据库/实例/服务器

答:

2赞 Mike Nakis 10/25/2023 #1

在 C# 中,不能将字符串的内容设置为“”。不能将字符串的内容设置为任何内容。C# 中的字符串是不可变的。

也许你的意思是“清除 StringBuilder 有意义吗?

从理论上讲,如果出现以下情况,清除 StringBuilder 可能会有好处:

  • 你把它放在身边并重复使用它。StringBuilder
  • 你正在用巨大的字符串填充它。我的意思是,真的很大。就像兆字节长的字符串一样。

在上述情况下,可能值得在每次使用后清除,而不是在每次重用之前立即清除。StringBuilder

但是你可能不会保留它,即使你保留了,你的SQL查询也可能没有兆字节长,所以不要再担心这个了。StringBuilder

不,你的猜测是错误的,编译器不会对此做任何事情,无论有没有优化。这些都是运行时的事务,而不是编译器的事务。

评论

0赞 Rand Random 10/25/2023
恕我直言,您的主张“不能将其设置为任何内容”是一个错误的说法,这似乎暗示这是无效的foo = "Hello World";
0赞 Mike Nakis 10/25/2023
@RandRandom你是对的。我将通过重用 OP 的确切术语来解决此问题。
1赞 Mike Nakis 10/25/2023
@RandRandom在那里,我修好了它。