0

マネージコードのみを使用してC#の残りの空きスタック/ヒープメモリを取得する方法はありますか?

具体的には、現在割り当てられている状態でまだ使用可能なメモリではなく、ホストシステムのメインメモリに基づいて(将来)割り当てられる可能性のあるすべてのメモリを意味します。

この情報は、システムメモリの不足を防ぐために、空きメモリが少ないシステムで対策を講じるために使用されます。

4

2 に答える 2

2

呼び出しスタックのサイズを決定するために使用できるvirtualqueryと呼ばれるメソッドがあります。ここにはたくさんのC#の例があります。

Cで使用可能なスタックサイズを確認する

C#でスタックサイズを確認しています

大きなヒープ割り当ての場合は、MemoryFailPointを試して、割り当てが可能かどうかを確認し、別の例外をスローしてからOOMhttp://msdn.microsoft.com/en-us/library/system.runtime.memoryfailpoint.aspxを試すことができます

于 2013-01-10T01:13:31.563 に答える
1

主にAbdElRaheimでカバーされている回答...32ビットシステムのヒープに関する追加の注意事項。

ヒープ割り当てのスペースをチェックしたい場合(BTW、x64以外のプログラムではやや興味深い):空きメモリの合計量だけでなく、すべてのリージョンのマップも必要であり、すでに割り当てられているものを確認できます。あなたが探している最も興味深い情報は、アドレス空間にロードされたDLLです-1GBの空きがあるとしても、1GBのブロックを割り当てることができるという意味ではありません-ランダムなネイティブDLLがロードされている場合、GCが結合できない複数のチャンクが存在する可能性があります途中で。

ここまで進みたい場合は、 VirtualQueryが出発点として考えられます。

于 2013-01-10T01:49:17.563 に答える