3

実行時にいくつかの外部アセンブリをアプリケーションにロードしています。また、各外部アセンブリで定義されている特定のクラスで使用できるメモリの量を制限する必要があります。たとえば、インスタンスあたり10 mbです。そうしないと、OutOfMemoryが発生します。

私はこれを行うための最良の方法をグーグルで検索し、CLRランタイムホスティングに関するいくつかの情報を見つけました。それは私が必要としているもののようですが、良い例を見つけることができません。

誰かがコードの例やCLRランタイムホスティングを使用したメモリ管理に関するいくつかのリンクを共有できますか?それとも、クラスごとのメモリ量を制限するためのより良い解決策がいくつかありますか?

前もって感謝します。

4

2 に答える 2

4

これは、CLRホスティングを介して実行できることではありません。CLRをホストしている場合は、GCからWindowsへの割り当て要件を満たすことができます。たとえば、VirtualAllocの代わりに他のアロケータを使用します。ただし、オブジェクトが割り当てられるたびにホストが呼び出されるわけではありません(これはコストがかかりすぎます)。

理論的には、CLRプロファイリングAPIを使用してこれを実現できます。オブジェクトが割り当てられるたびにコールバックを受け取ることができます。

しかし、あなたはこれを間違った視点から見ようとしているのではないかと思います。非常にきめ細かいクラスのインスタンスによって使用されるメモリの量を制限する代わりに、代わりにこれらの外部アセンブリを別々のプロセスに分離して、Win32 Job Object APIを使用して制限することもできますか?

于 2011-01-30T12:21:18.420 に答える
0

個々のプロセスメモリの消費を制限することを目的としている場合は、Processクラスの「MaxWorkingSet」プロパティを使用する必要があると思います。詳細については、 http://msdn.microsoft.com/en-us/library/system.diagnostics.process.maxworkingset.aspxを参照してください。

于 2011-01-30T13:03:06.900 に答える