2

C# でいくつかの matlab 関数を使用しています。関数をdllに変換すると、2つのdllがあります。1 つは Entropy.dll で、もう 1 つは EntropyNative.dll です。

Entropy.dll を使用する場合、MCR でのみ動作する MWArray クラスが必要なため、MATLAB コンパイラ ランタイム (MCR) をターゲット コンピューターにインストールする必要があります。ただし、ターゲット コンピューターに MCR をインストールしたくないので、Object代わりMWArrayにパラメーターとして受け取る EntropyNative.dll を使用しようとしました。したがって、各コンピューターに MCR をインストールする必要はありません。ただし、ネイティブ dll を使用すると、MWMCR:EvaluateFunction error.発生します。つまり、メモリ不足の例外です。ファイル サイズと機能は同じですが、ネイティブ dll を使用するとこのエラーが発生するのはなぜですか?

この (Entropy.dll) は機能し、エラーは発生しません。

MWNumericArray arr1 = null;
Entropy ent = new Entropy(); //Matlab function.
while(true)
{
     double[] arraySegment = new double[window];
     arr1=arraySegment;
     MWArray function1Result = ent.function1(arr1);
     MWArray function2Result = ent.function2(arr1);
     arr1=null;
}

EntropyNative.dll を使用すると、メモリ不足エラーが発生します

Entropy ent = new Entropy();
while(true)
{
     double[] arraySegment = new double[window];
     double function1Result = ent.function1(arraySegment);
     double function2Result = ent.function2(arraySegment);
}

Native dll を使用したいのですが、どうすればこのエラーを解消できますか? GarbageCollector を強制しようとしましたが、役に立ちません。また、試してみent.WaitForFiguresToDie()ましent.Dispose()た。

ent.WaitForFiguresToDie(): このメソッドは、MATLAB Figure ウィンドウをモーダル ダイアログ ボックスとして動作させます。このコンポーネントに関連付けられているすべての Figure ウィンドウが閉じられるまで、メソッドは戻りません。

4

0 に答える 0