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. 0を返しません0
- 3. Django 1.11:フォームフィールドを消去しません
- 4. Sparkがすべての設定済みメモリを使用していません
- 5. CSSの透過性のためにrgba(0、0、0、0)またはrgba(255,255,255、0)を使用しますか?
- 6. PHP共有メモリはすべて0を読み込みます
- 7. Android:高さとメモリ消費量が0で表示する
- 8. レンダスクリプトのコンパイル済みファイルはキャッシュを消去せずに更新されません
- 9. ParseInt()は0を返しません。
- 10. パンダデータフレームto_csv書き込み[0 0 0 ...、0 0 0]
- 11. @@ FETCH_STATUS = 0は機能しません
- 12. Rails:validates greater_than_or_equal_to 0は機能しません
- 13. 外部割り込み0は機能しません
- 14. プロパティを読み取ることができません「0」カスタムフィルタパイプ
- 15. プロパティを読み取ることができません「0」2
- 16. シュレッドプリファレンスを消去できません
- 17. タイプ消去済みです...非ジェネリックプロトコルに必要な構造体?
- 18. Graphics2Dは透明な画像を消去しません
- 19. java.lang.IllegalStateException:行0、列-1を読み取れませんでした
- 20. Google Scriptはプロパティ "0"を読み取れません
- 21. 代替indexPath = NSIndexPathてみましょう(forRow:0、inSectionは:0)
- 22. なぜ制約は0 0 0 0全体のビューに合っていませんか?
- 23. なぜtheft.getTime()[0] = "aaa" + theft.getTimie()[0]は値を変更しませんか?
- 24. タイプ消去はJavaマップクラスでは機能しません
- 25. margin:0を使用していても、Firefoxはセンターテーブルではありません。
- 26. NSInternalInconsistencyException '、reason:'セクション0に行0を挿入しようとしましたが、更新後にセクション0に0行しかありません。 '
- 27. cuda乱数は常に0と1を返しません。
- 28. メッセージキューは引数として0を受け付けません
- 29. websocketでTcpClientを使用する受信データ取得\ 0 \ 0 \ 0 \ 0
- 30. kAudioDevicePropertyBufferFrameSizeRangeは{0、0}を返します
もう1つの回避策は、しばらくの間、コンピュータ上で複数のメモリ集約型ビデオゲームをプレイし、GCが動作を開始するか、UnmanagedMemoryStreamを使用して、アンマネージコマンドを使用して消去することです。 – IDWMaster
あなたは深く無意味な数字である「ワーキングセット」を見ています。タスクマネージャを使用しないでください。 –
私はそうではありません。私はプロセスエクスプローラを使用しています。 – IDWMaster