【发布时间】:2019-02-08 07:57:40
【问题描述】:
我有一个巨大的字符串列表。我想将这些列表保持为内存高效。我试图保留一份清单。但是,它为每个包含 5 个字符的字符串使用 24 个字节。也就是说,应该有一些开销区域。
然后,我尝试保留一个字符串数组。内存使用效率有点高。但是,我仍然有内存使用问题。
如何保存字符串列表?我知道“C# 为每个字符保留 2 个字节”。我想保存一个包含 5 个字符的字符串,即 5*2 = 10 个字节。但是,为什么它在这个过程中使用 24 字节呢?
感谢您的帮助。
【问题讨论】:
-
您忽略了对象开销,以及 C# 字符串“知道”其长度的事实。请参阅codeblog.jonskeet.uk/2011/04/05/of-memory-and-strings 了解有关这方面的大量详细信息。
-
一个字符串也有长度,所以你至少有 n*2+4 个字节,其中 n 是长度。但问题是:你必须对字符串序列做什么?它是一个常数吗?它是文件的内容吗?你必须如何消费它?如果您知道要阅读什么以及如何搜索它,您甚至可以将它存储为一个字节数组。您真的需要将整个内容存储在内存中吗?
-
请注意,如果您有很多相等的字符串,这将有助于 lot 确保每个不同的字符串值只有一个字符串对象。跨度>
标签: c# arrays list memory-management