我需要在内存中保存巨大数量的布尔值(位)。如果我在一段时间后使用List<bool>
得到OutOfMemoryException
,有没有办法在不分割成块的情况下保存大量的位?
答案 0 :(得分:2)
编码你的布尔变量。我举个例子:
假设列表中有32个bool变量:1001001100101100000001011010010
如果要将所有这些变量保存在内存中而不对其进行编码,则应使用至少10个字节,但通过使用简单的编码算法,可以节省大量内存。这32个布尔变量的简单建议算法是将它们保存为32位int = 1234567890 。这样,内存使用量只会减少到4个字节!
处理它的每个数据都需要编码,因此CPU使用率会增加而不是内存使用量。
答案 1 :(得分:0)
您仍然可以使用List<bool>
,但是,如果您尝试在64位环境中使用非常大的列表,则需要在应用程序配置中启用大型对象。
从MSDN
获取更多信息答案 2 :(得分:0)
查看BitArray类,它提供了一种存储位掩码的简洁方法
答案 3 :(得分:0)
您是否尝试过预先预留空间?这样,该列表不必长时间担心增长。你在评论中假设它应该可以存储2.5亿。但是以下运行至少对我来说运行得很好,并且可能允许你存储更多,因为它不需要不断调整大小:
List<bool> test = new List<bool>(1000000000);
话虽这么说,你会占用更少的内存来存储这个位。该解决方案可能更可取,但您必须为此编写更多自定义代码。
另外......这似乎是一个非常奇怪的请求。也许有一种不同的方法可以解决你的问题?