我有一個C#程序,它使用生成語法生成樹木,花朵和類似有機實體的3D模型(有關L-Systems的更多信息,請參閱wikipedia entry) - 當我生成一棵帶葉子的大樹,我(預計)會在字符串中呈現指數級增長,如果我願意的話,它可以達到100的演出。處理超大字符串的選項
約束條件 - 我必須在C#中執行此操作(C++) - C++ /本機端正忙於編譯和渲染相當龐大的幾何圖形。
所以StringBuilder是正確的 - 即使它可以處理它,我沒有足夠的內存!
我不想做一個純粹的基於文件的解決方案 - waaaaaayyyyyyyy toooooooooooo sloooooooooooowwww!
我不能改變語法 - 我意識到我可以壓縮標準的L-Systems符號,但它是一個語境敏感的語法,所以一旦你得到了它的工作,你就會變得非常迷信擺弄它。
事情我已經考慮
內存映射文件 - 我不介意使用P/Invoke去的原生層來支持的事情,我只是不想重寫整個生產系統中C++ - 但我還沒有發現很多方便的C#庫訪問此功能的方式
低級別的內存管理/頁錯誤等 - 但是,嘿,如果我這樣做,我不如賣掉它作爲產品 - 使緩慢純文件爲基礎的解決方案不看起來這樣一個壞主意
任何人有什麼想法嗎?如何有效地遍歷/操作/擴展生產語法生成的多字符串?
您可能會詳細介紹一下您所做的字符串操作。只需追加寫入?隨機讀取/寫入?在一個塊中隨機讀取/寫入?隨着數據的大小,你顯然需要在磁盤上存儲一些東西,但是你想在RAM中保留一個工作集?你如何識別工作集?我假設一個數據庫不適合這種操作。 – 2010-08-22 18:44:10
這是一個生產系統 - 整個字符串被處理,並且被識別的子字符串被替換爲它們的新作品 數據庫將是'有問題的' 它實際上是一個巨型圖靈機 - 我需要在RAM的頭部保留什麼,但否則可以將其打開和關閉磁盤 – 2010-08-23 02:13:39
有風險陳述明顯,讓我拋出一個可能性:壓縮。這些自引用結構本質上是可壓縮的。或許,不是使用替換來顯式替換擴展後的段,您可以使用一種表示,讓您只需引用擴展,從而允許根據需要重新使用該引用。這似乎是有一個應用程序只使用TB來繪製一片葉子的唯一選擇。 – 2010-08-23 02:53:01