繁体   English   中英

C#中的高效小字节数组

[英]Efficient small byte-arrays in C#

我有很多非常小的物件。 为了确保数据存储得非常紧凑,我重写了该类以使用可变字节编码将所有信息存储在字节数组中。 这些数百万个对象的大多数实例仅需要3到7个字节即可存储所有数据

进行内存分析后,我发现这些字节数组始终至少占用32个字节

有没有一种方法可以比位拼凑成byte []更紧凑地存储信息? 指向非托管数组会更好吗?

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); } }
}

您面临着一些消耗内存的问题。 一种是对象开销,另一种是对象对齐到32位或64位边界(取决于您的构建)。 您当前的方法会遇到这两个问题。 以下资源对此进行了更详细的描述:

当我摆弄基准尺寸时,我在玩这个游戏。

一个简单的解决方案是简单地创建一个结构,该结构具有一个长值的单个成员。 它的方法将使用移位和掩码位摆弄来处理字节的打包和拆包。

另一个想法是一个类,通过ID为对象提供服务,并将实际字节存储在单个后备List<byte> 但这会变得复杂和混乱。 我认为结构的想法要简单得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM