我需要从数据库(nvarchar)中提取大型Unicode文本字符串(例如200Mb)并存储在内存中进行处理.即我需要随机访问字符串的所有部分.
从严格的以内存为中心的角度来看,使用System.IO.MemoryStream和System.String作为内存表示的专家和内容是什么.
我试图研究的一些因素是:
这些对象如何在[假设]高度分散的低内存环境中起作用
不变性
内存中的实际大小(如果流是UTF8,我们的大小几乎减半)
还有另一个我没想过的对象吗?
我正在寻找关于这些要点的清晰度和建议,以及我没有想到的任何其他记忆考虑因素?
注意:可能有更好的方法来处理这些字符串,但此时我真的只是询问存储这样一个对象的内存考虑因素.
从严格的以内存为中心的角度来看,使用System.IO.MemoryStream和System.String作为内存表示的专家和内容是什么.
我试图研究的一些因素是:
这些对象如何在[假设]高度分散的低内存环境中起作用
IMO,MemoryStream仅在编码很简单时才有用(例如ASCII,ISO-8859-X等).如果编码是UTF-8 并且您有非ASCII字符,则处理将变得更加困难.当然,MemoryStream几乎肯定会消耗更少的内存,但除此之外没什么区别.在引擎盖下,MemoryStream使用一个字节数组,该数组也需要在连续的内存块中分配.
内存中的实际大小(如果流是UTF8,我们的大小几乎减半)
对,纯粹的ASCII字符,MemoryStream将消耗等效字符串消耗的一半.
还有另一个我没想过的对象吗?
List// has a nicer interface for processing
字符串如何存储在数据库中?varchar还是nvarchar?
问候,
安德烈亚斯