我已「成功」實現了非重組三叉樹以對某些固定收益衍生品進行定價。 (如下圖所示 - 但有三個分支不能重新連接)如何在構建非重組三叉樹時在c#中避免System.OutOfMemoryException
不幸的是,事實證明,我可以使用的節點數量受到可用內存的嚴重限制。如果我建立一個樹20個時間步長,這導致3^19個節點(1,1所以十億節點)
每個時間步長的節點都保存在List<Node>
和這些陣列被存儲在Dictionary<double,List<Node>>
每個節點都通過new Node(...)
實例化。我也通過new Class()
實例化每個列表和字典,也許這是我錯誤的根源。
另外System.OutOfMemoryException
由於字典/列表對象大(通常是這樣),但因爲我似乎有太多的節點 - 過了一段時間new Node(...)
不能分配任何進一步的內存。最終2GB的最大列表容量也會啓動,我認爲 - 看看List如何隨着每個時間步驟以指數級增長。
也許我的數據結構太浪費了,或者不太適合手頭的任務。
一個可能的解決方案可能是將樹保存到文本文件,從而完全避免內存問題。然而,這將需要一個巨大的解決方法。
編輯: 添加一些更多的背景。我需要樹來定價路徑相關產品。這意味着不幸的是我將不得不訪問所有的節點。還有什麼更多的樹已經建成後,我從樹葉開始,並及時倒退,以確定價格。我也已經只生成了我需要的節點。
編輯2: 我已經給了一些主題,但也考慮了各種迴應。難道是我只需要將相應的樹級別序列化到硬盤驅動器。所以基本上 - 我創建一個時間步(List<Node>
)將其寫入磁盤等。稍後當我從樹葉開始 - 我將只需要加載它在反向或向下。
這是運行在x64上嗎? – Andrew
我的電腦在工作時的系統屏幕顯示64位 –
@AndreyLujankin您是否將程序編譯爲64位應用程序以利用此程序,或者將您編譯爲32位應用程序? – Servy