2

パフォーマンス上の理由から、SQL 2008 R2 テーブル (64 ビット プラットフォームで実行) のデータを暗号化するために使用している C#.Net スタンドアロン DLL を作成しました。通過する行が多数ある可能性があるため、これは非常にメモリを集中的に使用する可能性があります。

これをアセンブリ/関数として SQL CLR と統合しましたが、すべて正常に動作しています。

このアセンブリは Permission_Set'UNSAFE' で実行されていますが、マネージ アセンブリとして実行されています (sys.dm_clr_loaded_assemblies によって報告されています)。

MS Process Explorerでメモリ使用量を監視しており、関数が呼び出されるたびにメモリ使用量が増加していますが、解放されていません。

MSDN のドキュメントを読むと、AppDomain は関数から返されたデータを将来の効率のためにキャッシュします。アセンブリをアンロードすると、メモリが解放されます。

いくつかの質問を聞きたいんです:

  1. AppDomain をアンロードせずに「フラッシュ」する方法はありますか?
  2. 「Dispose」としてマークされた DLL のすべてのオブジェクトは、GC によってクリーンアップされますか?
  3. (そしてこれは明らかに上記に関連しています!) GC は SQL Server プロセス空間もカバーしますか?

オンライン ドキュメントは SQL CLR やメモリなどについてあまり明確ではないため、上記のヘルプをいただければ幸いです。

ありがとう :)

4

0 に答える 0