Related Question構造体に配列のバイト配列をマーシャリングするにはどうすればよいですか?
私は最も速い方法を見つけようとしていました。その質問で私が選んだ方法は、私にとってはボトルネックになっています。私はファイルからいくつかのバイナリデータを読み込み、それを管理された構造体定義に入れる必要があります。管理されていないコードは関係していないので、GCHandleを割り当てるよりも良い方法があると思います。
バイトの配列を同じサイズの構造体にキャストする方法はありますか?
static public T ReadStructure<T>(byte[] bytes)
where T : struct
{
int len = Marshal.SizeOf(typeof(T));
IntPtr i = Marshal.AllocHGlobal(len);
try
{
Marshal.Copy(bytes, 0, i, len);
return (T)Marshal.PtrToStructure(i, typeof(T));
}
finally
{
Marshal.FreeHGlobal(i);
}
}
確かに、それは非常に高速ではありません - それは私の場合には、する必要はありません。
これを試すことがあります。問題は、私は254バイトを読み、最初の240が型を含んでいるかどうかを確認しなければならないことです。この方法では、ファイルからデータを読み込み、最初の240バイトをptrにコピーしてチェックし、254全体をptrにコピーします。たくさんのコピーが起こっています。 – scottm
最適化のための2つの道があるような音がします。いくつかのコードを投稿できますか? –
@Ben、関連する質問には、私が現在やっていることの例があります。 – scottm