.NET アプリケーションにコア機能を提供する C++ ライブラリ (MFC なし、ATL なし) があります。C++ DLL は、PInvoke を使用してそのクラス/メソッドにアクセスするために使用できる C# アセンブリを生成するためにSWIGによって使用されます。この C# アセンブリは、.NET アプリケーションで C++ DLL 内の機能を使用するために使用されます。
この問題は、メモリ リークに関連しています。私たちの .NET アプリケーションでは、C++ DLL から特定のクラスの何千ものインスタンスを作成する .NET コードにループがあります。ループはインスタンスを作成するにつれて遅くなり続けますが、ループ内で GC.Collect() を呼び出すと (これはお勧めできません)、処理が速くなります。どうしてこれなの?型で Dispose() を呼び出しても、速度には影響しません。GC.Collect() を使用するとプログラム速度が低下することを期待していましたが、それは正反対です。
SWIG が生成する各クラスには、Dispose() を呼び出す ~destructor があります。すべての Dispose メソッドには、アンマネージ メモリを破棄する呼び出しを行うステートメントの周りに lock(this) があります。最後に GC.SuppressFinalize を呼び出します。また、リリース ビルドでは AccessViolationException が散発的に発生します。どんな助けでも大歓迎です。