![](/img/trans.png)
[英]How to compare logically equal, but technically unequal byte-arrays ( byte[] ) in 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.