2016-05-30 10 views
0

ilnumericsのlinesolveに問題があります。ここではコードです:例外System.OutOfMemoryExceptionがスローされました。ライン番号ilnumerics

A = A_damped; // (6691x3000) array 
D = d_damped; // array size 6691 

ILArray<double> AA = A; // AA matrix (3000x6691) so should be transposed 
AA = AA.T; 
ILArray<double> BB = D; // matrix (6691 x 1) 
ILArray<double> CC = ILMath.linsolve(AA, BB); 

と私は、次の通知を得た:

Exception of type 'System.OutOfMemoryException' was thrown. 

誰もがここにあります手掛かりを持っていますか?

+1

このエラーは確実に発生していますか、それはしばらくの間しか起こりませんか?あなたのアプリケーションが使用しているメモリ量を確認しましたか? 32ビットまたは64ビットを実行していますか? 'gcAllowVeryLargeObjects'(https://msdn.microsoft.com/en-us/library/hh285054(v=vs.110).aspx)を指定しましたか? – Luaan

答えて

0

@Luaanの提案の次に、問題のサイズが合理的な範囲にあることを確認してください。あなたのマトリックスは〜153MBを消費します。 Linsolveには一時的なメモリも必要です。一般的な計算では、一時的な配列にはもっと必要です。おおよその目安として、問題のサイズはアプリケーションで利用できるRAMの1/3を超えないようにしてください。同様にメモリを消費し、常にシステム上で実行されている他のプロセスがあるので、これは

  • あなたがOOMの問題が発生した最初のものは、64ビットを標的とすることである...、確実に決定することは困難です。
  • ILNumericsのthe latest versionを必ず使用してください。今日の時点では4.10です。
  • OOMを確実に削除できない場合は、問題のサイズを小さくするか、代わりに分散メモリを使用する必要があります。
+0

HaymoとLuaanに感謝して、私の問題を解決します。私は64ビットでアプリケーションを実行してから、プロジェクトの構成をチェックして、すべてのターゲットプラットフォームを86x(以前)の代わりにanyCPUに変更します。 – Cas

+0

なぜAnyCPUですか?それが64ビットで実行されていることを確認したい場合は、明示的にx64をターゲットにする必要があります。 Btw、SOに「ありがとう」と言う方法はアップフォートし、答えとしてマークすることです。 –

+0

私は他のPCでアプリケーションをテストする必要があります(時には32ビット)ので、他のPCで円滑に動作するためにはアプリケーションが必要です。申し訳ありませんが私はあなたの答えをupvoteするために十分な評判がありません。 :) btwあなたの提案をもう一度おねがいします。 – Cas

関連する問題