我有一些代码,我向其中添加了嵌套字典,格式如下:
Dictionary<string, Dictionary<string, Dictionary<string, float>>>
在这样做之后,我注意到我的应用程序的内存使用量显著增加。这些字典是以经常重复的字符串为键的,并且有许多这样的字典,数量达到数万个。
为了解决这个问题,我假设重复的字符串占用了大量的内存。我的解决方案是将字符串哈希化并使用整数代替(我会保留一份彩虹表的副本以便在必要时还原哈希)。
Dictionary<int, Dictionary<int, Dictionary<int, float>>>
所以我使用了一个内存分析器来查看能够获得什么样的大小减小。令我震惊的是,实际上我发现字符串存储的大小(包括正常和全面)都更小了。
这对我来说并不直观。即使编译器足够聪明,只存储字符串的一个副本并使用引用,我认为该引用将是指针,其大小是int的两倍。我也没有使用任何String.Intern
方法,因此我不知道如何完成这项任务(同时,这里是否适合使用String.Intern
方法?)
我非常困惑正在发生什么,感谢任何帮助。
Dictionary<Tuple<string, string, string>>
来消除嵌套。Dictionary
不是一个小型类型。使用结构元组。 - usr