我有一个非常小的对象的巨大集合。为了确保数据存储非常紧凑,我重写了类,以便将所有信息以可变字节编码存储在字节数组中。这些数百万个对象的大多数实例只需要3到7个字节来存储所有数据。C中有效的小字节数组#
内存分析后,我发现这些字节数组总是至少需要32字节。
有没有一种方法可以将信息存储得比字节[]更紧凑?指向非托管阵列会更好吗?
class MyClass
{
byte[] compressed;
public MyClass(IEnumerable<int> data)
{
compressed = compress(data);
}
private byte[] compress(IEnumerable<int> data)
{
// ...
}
private IEnumerable<int> decompress(byte[] compressedData)
{
// ...
}
public IEnumerable<int> Data { get { return decompress(compressed); } }
}
我添加了代码。我必须存储一些非常小的整数 - 因此可变字节编码。 – user2033412
这似乎是一个“问题”,与您在创建数组之前创建数组的方式有关。你能提供压缩方法的源代码吗? –
问题的一部分是对象开销,在64位版本中更糟糕。这有一些关于这方面的信息:[内存和字符串](https://blogs.msmvps.com/jonskeet/2011/04/05/of-memory-and-strings/) – hatchet