2つの巨大なMemoryStreamを作成するメディアをストリームするプログラムがあり、完了したらゼロにする必要があります。問題は、MemoryStream.SetLength(0)を呼び出した後にメモリが再利用されていないように見えることです。 GC.Collect()は問題を解決するようですが、アプリケーションのすべてのスレッドがハングアップするため、これはプログラミングの習慣が悪いと聞いています。ハングスレッドはメモリをクリアするために短時間で問題になることはありません。しかし、この問題に対するもう一つの回避策があるといいでしょう。助言がありますか?MemoryStream.SetLength(0)とMemoryStream.Capacity = 0は使用済みメモリを消去しません
答えて
GC.Collect()は、あなたが一度にメモリを収集するためにGCを強制する必要があると思うんなぜ何の問題...がない
問題を解決するようですか?それは、システムが必要と判断したときに行われます。 GCを超越しようとしないでください;)
上記の理由からです。技術に精通したこのプログラムのユーザーは、何もストリーミングしていないアイドル状態のアプリケーションに対して、異常に大量のRAMを使用していることに気付くかもしれません。 – IDWMaster
さて、大部分の "ビッグ"アプリは同じことをしています...ウェブブラウザのメモリ消費量を見てください –
とにかく、気になるなら、あなたが何をしているのかわかっていれば、GC.Collectをいつでも明示的に呼び出すことができます。あなたのアプリがたくさんの仕事をしている間にそれをしないでください –
メモリにWriteメソッドをゼロで埋めてから、Flushを呼び出してからMemoryStreamのCloseメソッドまたはDisposeメソッドを呼び出して、残っているデータがストリームは廃棄された後もメモリに残ります。 (巨大なメモリストリームの場合は遅くなりますが、プログラムで実際のパフォーマンス上の問題が発生するかどうかをプロファイリングで判断した上で、これを心配する必要があります)
は、メモリのUnmanagedMemoryStream
には、Marshal.AllocHGlobal
のようなメモリが割り当てられています。
メモリストリームでdisposeを呼び出すことはできますか?それ以外の場合は、gc.collectを実行したときにperfが受け入れられない場合を除き、先に進んでください。私たちは、顧客が「gcがそのことをする」という説明が容認できないことを発見した同様の状況を抱えていました。それが害を及ぼさないならば、顧客が望むことをしなさい。
- 1. request.getRemoteAddr()を使用すると、0:0:0:0:0:0:0:1
- 2. CSSの透過性のためにrgba(0、0、0、0)またはrgba(255,255,255、0)を使用しますか?
- 3. PHP共有メモリはすべて0を読み込みます
- 4. Android:高さとメモリ消費量が0で表示する
- 5. Rails:validates greater_than_or_equal_to 0は機能しません
- 6. Graphics2Dは透明な画像を消去しません
- 7. NSInternalInconsistencyException '、reason:'セクション0に行0を挿入しようとしましたが、更新後にセクション0に0行しかありません。 '
- 8. cuda乱数は常に0と1を返しません。
- 9. margin:0を使用していても、Firefoxはセンターテーブルではありません。
- 10. 0 + 0 + 0 ... + 0!= 0
- 11. タイプ消去済みです...非ジェネリックプロトコルに必要な構造体?
- 12. {0}は交換できますが{{0}}は交換できませんか?
- 13. 「java.lang.IllegalStateException:行0 col 0からフィールドスロットを取得できませんでした」
- 14. エラードメイン= SKErrorDomainコード= 0 "操作を完了できませんでした。 (SKErrorDomain error 0.) "
- 15. 候補テンプレートが無視されました: 'const type-parameter-0-0 *'と 'char'は一致しません
- 16. 読み取りエラー:0:リソースは一時的に利用できません
- 17. FASM - "buffer db 0、0、0、0、0、0、..."を圧縮する
- 18. margin:0 Internet Explorerで自動0が動作していません
- 19. メモリ内データベースを消去する
- 20. "0"引数をとるオーバーロードはありません[C#]
- 21. sfWidgetFormDate - 今後40日、過去0日
- 22. Javascript/Jqueryは変数の値として0または1を使用できません。
- 23. -moz-box-shadow:0 0 10px rgba(0、0、0、0.3); CSS3 Validatorをパスしない
- 24. プロパティを読み取ることができません「0」未定義のNode.js
- 25. TypeError:Forループでヌルのプロパティ '0'を読み取ることができません
- 26. %:s/\([0-9] * \)_ \(* \)/ \ 2はファイル名を変更しません
- 27. list.Sort ArgumentExceptionエラー:IComparerは0(null)を返しません
- 28. なぜdocument.getElementById( "thediv")。forms [0]は要素を返しませんか?
- 29. $ templateCacheはファイルを取得しません(オブジェクト{id: "templates"、size:0})?
- 30. selectedOptions [0] .textContent; IEまたはFirefoxで動作しません
もう1つの回避策は、しばらくの間、コンピュータ上で複数のメモリ集約型ビデオゲームをプレイし、GCが動作を開始するか、UnmanagedMemoryStreamを使用して、アンマネージコマンドを使用して消去することです。 – IDWMaster
あなたは深く無意味な数字である「ワーキングセット」を見ています。タスクマネージャを使用しないでください。 –
私はそうではありません。私はプロセスエクスプローラを使用しています。 – IDWMaster