保存大量的布尔值

时间:2014-03-01 07:26:46

标签: c# binary

我需要在内存中保存巨大数量的布尔值(位)。如果我在一段时间后使用List<bool>得到OutOfMemoryException,有没有办法在不分割成块的情况下保存大量的位?

4 个答案:

答案 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);

话虽这么说,你会占用更少的内存来存储这个位。该解决方案可能更可取,但您必须为此编写更多自定义代码。

另外......这似乎是一个非常奇怪的请求。也许有一种不同的方法可以解决你的问题?