問題タブ [unmanaged-memory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - F# NativePtr.stackalloc は C# の stackalloc より遅い - 逆コンパイルされたコードが含まれる
F# のパフォーマンス テストを続けます。その他の背景については、こちらを参照してください。
f# 構造体コンストラクターの NativePtr.stackalloc
F# NativePtr.stackalloc 予期しないスタック オーバーフロー
これで、スタック配列が F# で動作するようになりました。ただし、何らかの理由で、同等の C# は約 50 倍高速です。ILSpy の逆コンパイル バージョンを以下に含めましたが、1 行だけが実際に異なっているように見えます (stackAlloc 内)。
何が起きてる?この大きな違いの原因は、チェックされていない算術演算にあるのでしょうか? どうすればこれをテストできるかわからない??
https://msdn.microsoft.com/en-us/library/a569z7k8.aspx
F# コード
C# コード
F# バージョンの逆コンパイル
C# バージョンの逆コンパイル
F# バージョン IL - バイト割り当て
C# バージョン IL - バイト割り当て
更新された F# IL - IntPtr 割り当て
更新された C# IL - IntPtr 割り当て
.net - 管理されていないメモリは強制 GC によってのみ解放されますが、なぜですか?
WPF で記述された複雑な内部 GUI アプリケーションがあります。強制するまでネイティブメモリが解放されないことがありGC.Collect()ます。本番環境で収集した統計は次のとおりです。
アンマネージ メモリにスパイクがあることがわかりますが、マネージ メモリの使用量は低く安定しています。
必要な場合にのみ GC が発生することはわかっていますが、要求されていない未管理のデータが大量にあると、ユーザーは遅く感じます。GC を手動で収集すると、明らかに高速になります。アンマネージ メモリは GC 後に解放される可能性があるため、メモリ リークではないと思います。
また、プロセスで何が起こるかを特定する方法についても、いくつかの経験を積みたいと思います。ログがあり、複数のユーザーから同じ問題に関するいくつかの異なるログを収集しました。残念ながら、異なるログから類似性を見つけることができませんでした (それは起こり、いつでも起こり始めるように見えます)。
DEV 環境でも QA 環境でも問題を再現することはできません。または、DebugDiag を使用して、別のモジュールからのアンマネージ割り当てを追跡することもできます。ところで、管理者権限がないため、管理されていない割り当てを追跡したり、運用環境でグローバル フラグを設定したりすることはできません。
しかし、完全なメモリ ダンプを実行することはできます。それは問題 (およびその方法) を特定するのに役立ちますか?
