特定の固定所得派生物を価格設定するために、非再結合三項木を「正常に」実装しました。 (下の図のようなものですが、再接続しない3つのブランチがあります)残念ながら、私が使用できるノードの数は、利用可能なメモリによって大きく制限されていました。私は20時間ステップでツリーを構築する場合、これは3^19個のノード(SO 1,1億ノード)どのようにSystem.OutOfMemoryExceptionを回避するには、非再結合三項木を構築するとき
各時間ステップのノードをList<Node>
に保存され、これらの配列はDictionary<double,List<Node>>
各ノードはnew Node(...)
によってインスタンス化されます。また、リストと辞書のそれぞれをnew Class()
でインスタンス化します。おそらく、これが私のエラーの原因です。
また、Dictionary/List-Objectが大きい(よくあることですが)ため、投げられませんが、あまりにも多くのノードを持っているように見えるため、しばらく後にnew Node(...)
はそれ以上のメモリを割り当てることができません。最終的に2GBの最大リスト・キャパシティもまた、私はリストが各時間ステップで指数関数的に大きくなっていく様子を見ています。
私のデータ構造はあまりにも無駄であるか、または手元の仕事にはあまり適していないかもしれません。
可能な解決策は、ツリーをテキストファイルに保存してメモリ問題を完全に回避することです。しかし、これは大きな回避策を必要とします。
編集: さらに背景を追加します。パス依存の製品を価格するにはツリーが必要です。残念ながら、私はすべてのノードにアクセスする必要があります。木が築かれた後には何があるのですか?私は葉から始まり、価格を決定するために時を経て後退します。私はすでに必要なノードだけを生成しています。
Edit2: 私はトピックをいくつか与えましたが、さまざまな反応も考慮しました。それぞれのツリーレベルをハードドライブにシリアル化するだけでよいのでしょうか。だから基本的に - 私は1つのタイムステップ(List<Node>
)を作成してディスクなどに書き込みます。その後、葉から始めて - それを逆方向にロードするだけです。
これはx64で実行されていますか? – Andrew
仕事中の私のPCのシステム画面は64ビットであると言います –
@AndreyLujankinそして、これを利用するためにあなたのプログラムを64ビットアプリケーションとしてコンパイルしていますか、それとも32ビットアプリケーションとしてコンパイルしていますか? – Servy