如何减少.NET字符串密集型应用程序的内存占用?

DxC*_*xCK 17 .net c# string utf-8 utf-16

出于性能原因,我的应用程序在内存中有大约1,000,000个字符串.我的应用程序消耗~200 MB RAM.

我想减少字符串消耗的内存量.

我知道.NET代表UTF-16编码的字符串(每个字符2个字节).我的应用程序中的大多数字符串都包含纯英文字符,因此以UTF-8编码存储它们的效率将是UTF-16的2倍.

有没有办法在UTF-8编码的内存中存储字符串,同时允许标准的字符串函数?(我的需求主要包括带StringComparison.OrdinalIgnoreCase的IndexOf).

Bru*_*ant 11

不幸的是,你不能改变字符串的.Net内部表示.我的猜测是CLR针对多字节字符串进行了优化.

你正在处理的是时空权衡的着名范例,它指出,为了获得记忆,你将不得不使用更多的处理器,或者你可以通过使用一些内存来节省处理器.

也就是说,看看这里的一些考虑因素.如果我是你,一旦确定内存增益对你来说足够了,你可以尝试编写自己的"字符串"类,它使用ASCII编码.这可能就足够了.

更新:

更多关于钱,你应该看看这篇文章" 内存和字符串 ",由StackOverflow传奇人物Jon Skeet来处理你所面临的问题.对不起,我没有马上提到它,花了一些时间才找到Jon的确切帖子.


its*_*e86 0

如果您创建自己的 UTF-8 字符串类(UTF8String?)并提供对 String 的隐式转换会怎样?为了记忆,您将牺牲一些速度,但这可能正是您所寻找的。