4

.NET関数Stream.Read()は、パラメーターとしてbyte[]を取ります。代わりにstackallocされたバイト*を渡す方法はありますか?これにより、余分なヒープ割り当てを行う必要がなくなり、ガベージコレクションの時間を節約できます。この関数は短く、繰り返し呼び出されます。

4

2 に答える 2

3

いいえ、できません。最初に配列を作成してそこにコピーする必要があります。MSDNフォーラムのこのスレッドも参照してください。

それとは別に、アプリケーションのコンテキストはわかりませんが、静的に割り当てられたバッファを使用できる可能性がありますか?マルチスレッドコンテキストでは、次のようにTLSにバッファを割り当てることができます。

class SomeDataProcessor
{
    [ThreadStatic]
    static byte[] _Buffer;
}

ただし、初期化子には注意する必要があることに注意してください。こちらもご覧ください

于 2011-06-26T00:36:01.487 に答える
-1

私はあなたができるとは思わないが、あなたが変換を単純化したいのなら。次を使用できます。

System.Runtime.InteropServices.Marshal.Copy

アンマネージアドレス、サイズ、バイトバッファなどを取り込みます

于 2011-06-26T00:18:19.033 に答える