2013-09-29 86 views
3

我有一個Delphi XE2項目來處理大量的計算。
在我的項目中,我總共有1290個號碼Edit,340個號碼Label,330號碼Panel,16號碼TabSheet。對於每個Edit,有OnChange,OnDblClick,OnEnterOnExit事件。如何解決Delphi內存不足錯誤?

我必須處理總共1034個數字Variable。我剛剛設計了Form,並沒有添加這些計算邏輯。現在我的.pas file變成62.5MB具有1815057行.dfm file變成1.98 MB具有65540行

我想編譯該項目使用Delphi XE2根據Windows XP Professional SP3 32Bit,但我得到的錯誤爲**[DCC Fatal Error] Unit1.pas(1815058): F2046 Out of memory**

我也試圖編譯它使用Delphi XE5Windows 8 Enterprise 64Bit,這裏也是,我遇到了同樣的問題。

我還沒有添加完整的計算邏輯,使用1034個變量數,如果我加上它們,至少4200行將被添加到.pas file

+8

那麼,你期望什麼。您有一個包含180萬行代碼的源文件。你需要學習如何抽象事物。不要在.dfm文件中創建1200個編輯控件。在運行時創建它們。只有在顯示標籤頁時才創建它們。對所有編輯使用一個「OnChange」事件處理程序。在'Sender'參數上切換行爲。你需要學習如何抽象行爲,而不是手動編碼每一個選項。想象一下當你想改變某些事情時會發生什麼。 –

+2

你的代碼很臭。 :-)具有1.8M LOC的單個單元是錯誤的,因此具有1290個編輯控件 - 用戶無法看到它們,因此它們不需要一直存在。你需要認真反思你的設計。除非你真的讓你的代碼易於管理,否則什麼都不會解決你的錯誤。我祝你好運,因爲你會需要它。 :-) –

+0

您是如何生成該程序的?你不能手寫它。你寫了一個程序來生成代碼?採取該程序的想法,並在運行時將其發生,而不是作爲預編譯步驟。 –

回答

14

您的整個方法是有缺陷的。編譯器根本無法處理您呈現文件的大小。一個180萬行的pascal源文件是荒謬的。一個2MB .dfm文件是不切實際的。

看來您已將所有可能的選項編碼爲單獨的控件和變量。您尚未親手編寫代碼,但在Excel中使用了預處理步驟。

解決方案並不是在編譯時展開所有選項。解決方案是編寫應用程序,以便它可以在運行時呈現不同的選項。所以,你有30個不同的變量,你可能已經創建了30個不同的標籤控件和30個不同的編輯控件。正確的方法是創建一個標籤和一個編輯控件。然後在運行時,根據用戶的選項,更改標籤的標題以及編輯控件的內容。

不要爲需要存儲的每個可能的值創建一個變量。使用數組和字典。

在高層次上,您需要採用Excel預處理步驟中包含的邏輯並將其轉換爲運行時的Delphi代碼。

相關問題