簡體   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