私は非常に小さなオブジェクトの巨大なコレクションを持っています。データが非常にコンパクトに格納されるように、変数バイトエンコーディングでバイト配列内のすべての情報を格納するようにクラスを書き直しました。これらの何百万ものオブジェクトのほとんどのインスタンスは、すべてのデータを格納するためにわずか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