私が動作しているストリームがMemoryStreamであることがわかっている場合は、非同期メソッド(CopyToAsync、ReadAsyncなど)を使用しないほうがよいですか?memorystreamsで非同期I/Oを使用する必要がありますか?
Stephen Clearlyのコメントthis SO questionは、多くの同時リクエストを処理できるサーバーアプリケーションで私が使用しているアプローチに疑問を感じました。
このアプリケーションでは、スレッドは無駄にならないようにすべてのI/Oが非同期に行われます。しかし、CopyToAsync f.i. MemoryStreamで実際に非同期ではありませんが、私は、サーバーアプリケーションでさえ、MemoryStreamで非同期操作を使用する利点があるのだろうかと思います。
'MemoryStream'は、メモリが割り当てられていて一般的に不必要にコピーされていることを意味するので、パフォーマンスを上げようとしているときの匂いです。しかし、コードがすでに完全に非同期であれば特別なケースを使用する必要はありません。if(ストリームはMemoryStream)の束を持っています。チェックは実際の性能をほとんど改善しませんメモリストリームを完全に排除するのではなく、 YMMVは、もちろん、プロファイリングはもっとあなたに伝えるべきです。 –
私はすでにプロファイリングしており、asyncを使うのはストレートシンクを使うよりも遅いです。私は当初、非同期を使用するとアプリケーションが重い負荷ではパフォーマンスが向上すると思っていましたが、memorystreamに対する非同期は実際には非同期ではないため、不要なオーバーヘッドが追加されます。ですから、Mem-StreamでCopyToAsyncを使うのはどういうことでしょうか? –
メモリストリームからメモリストリームにコピーすると何も得られません。それは単に書き込みを使用し、完了した[タスク](https://referencesource.microsoft.com/#mscorlib/system/io/memorystream.cs,1a4dcb744a23ba6f)を返します。 –