众所周知,String是不可变的.String不可变的原因是什么,StringBuilder类的引入是可变的?
我有一个字符串,我需要用字典中的值替换标记.它必须尽可能高效.使用string.replace执行循环只会消耗内存(字符串是不可变的,请记住).StringBuilder.Replace()会更好,因为它是用于字符串操作的吗?
我希望避免花费RegEx,但如果这样做会更有效率那么就这样吧.
注意:我不关心代码复杂性,只关心它运行的速度和消耗的内存.
平均统计数据:长度为255-1024个字符,字典中为15-30个字符.
如果必须使用String.Replace()替换测试50次,则基本上必须创建一个新字符串50次.StringBuilder.Replace()是否更有效地执行此操作?例如,如果我要替换大量文本,我是否应该使用StringBuilder,即使我不会向其添加任何数据?
我正在使用.NET,但我认为这与Java和其他语言可能相同.
当使用ILSpy检查System.String的代码时,我发现有一些方法被标记为MethodImplOptions.InternalCall,例如:
[SecurityCritical]
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern int nativeCompareOrdinalEx(string strA, int indexA, string strB, int indexB, int count);
Run Code Online (Sandbox Code Playgroud)
我知道MethodImplOptions.InternalCall意味着该方法由公共语言运行库本地实现,以优化代码以提高性能.
我的问题是:无论如何,是否可以让我们看到标记为MethodImplOptions.InternalCall的代码?
我听过有关这个主题的相互矛盾的故事,我正在寻找一点清晰.
如何string立即处理物体,或至少清除它的痕迹?