链接字符串方法时的内存消耗

时间:2015-06-22 06:38:29

标签: c# string immutability method-chaining

我知道C#中的string是一个不可变类型。当你链接字符串函数时,每个函数都会实例化一个新的string吗?

如果确实如此,使用链接方法对string进行过多操作的最佳做​​法是什么?

3 个答案:

答案 0 :(得分:2)

  

当你链接字符串函数时,每个函数都会实例化一个新的string吗?

总的来说,是的。返回修改后的字符串的每个函数都是通过创建一个包含与原始字符串分开存储的全新字符串的新字符串对象来实现的。

有一些方法可以避免这种情况,尤其是在从各个部分创建字符串时使用StringBuilder。但总的来说,很难说如何在不创建多个中间字符串对象的情况下创造更好的东西。

但是听起来很糟糕,它通常不是一个大问题:虽然它可能很昂贵,但由于字符串操作而产生的无关字符串对象很少会成为性能不佳的来源。除非你使用字符串做高性能的东西,否则你可能会忽略这样一个事实:你不断创建新的对象,然后扔掉它们。如果您以后有疑问,可以随时分析您的代码,以确定它是否真的重要。

答案 1 :(得分:0)

我们在模型中使用了绑定到UI的特殊方法来获取该对象的唯一ID。该方法将使用+运算符连接一些字符串。

有时会在一秒钟内调用10000次或更多次,这会在加载新数据时降低整个应用程序的速度。首次在应用程序中加载某些屏幕时,这是一个严重的瓶颈。所以我想如果你没有调用使用字符串操作的代码每秒至少几千次那么你就可以了。

还有string.Format方法,从长远来看,速度提高了几倍。

答案 2 :(得分:0)

  

我知道C#中的字符串是一个不可变类型。当您链接字符串函数时,每个函数都会实例化一个新字符串吗?

是的,字符串是不可变的,因此它们根本无法更改。但并不是每个函数都会实例化一个新字符串,因为有些字符可能容易受到string interning的影响(相同文本的字符串可以(但不总是!)存在于同一个内存空间中)

  

如果是真的,最佳做法是什么如何对字符串进行太多操作?

使用的最常用的两种方法是首先使用StringBuilderString.Format

构建字符串