簡體   English   中英

C ++ / MFC應用程序中的內存不足錯誤

[英]Out of Memory error in C++/MFC app

我有一個使用VS 6開發的舊Doc / View C ++ / MFC應用程序。我將Stingray Objective Grid 8.01 Pro用作數據網格。

最近,我們的“工作”規模越來越大。 這是內存不足錯誤開始出現的時候。

這是使我出現內存不足錯誤的情況:

僅供參考,當我說要在以下情況下加載工作時; 這意味着我讀取了一個數據庫,並使用將數據存儲在CArray和CList對象中的自定義類將與該作業關聯的數據加載到內存中。 存儲在文檔類中。 另外,我將某些數據存儲在該文檔的主視圖上的兩個StingRay網格中。

當我第一次打開該應用程序時,它在Task Mgr中顯示大約21 MB的內存使用情況。 我首先加載一份典型的工作,然后該應用程序將達到40 MB。 然后,我加載一個“大”作業,然后應用程序增長到大約159 MB。 接下來,我關閉“大”作業,應用程序下降到大約40 MB。 然后,我再次加載相同的“大”作業,它返回到大約159 MB。 然后,我打開一個包含StingRay網格的無模式窗口,並用作業中的數據填充該網格。 完成后,應用程序內存使用量將躍升至約1,421 MB。 然后,我關閉無模式窗口,然后恢復到大約163 MB。 然后,我關閉“大型”作業,它又回到了約45 MB。 然后,我嘗試重新打開相同的“大”作業,當我開始在主窗口(而非無模式窗口)上重新加載Stingray網格時,出現內存不足錯誤。 那時,應用程序在任務管理器中顯示了大約170 MB。

因為我可以關閉並重新打開作業而沒有任何問題,所以我只能假定將數據加載到無模式窗口中的Stingray網格中時,只能進行以下操作: 沒有釋放一些東西; 但是如果是這樣的話,為什么在關閉無模式窗口后,任務管理器中的內存使用率似乎恢復到接近正常水平。 關閉無模式窗口后,它只有大約5 MB。

我真正需要的是一些有關如何嘗試確定為什么我的應用程序僅在內存不足時僅使用160 MB內存錯誤的建議。

任何幫助,將不勝感激。

謝謝,

菲爾

加載網格時獲得1,421 MB的空間非常接近32位應用程序所允許的2GB地址范圍。 當然,surefire解決方案將盡可能成為一個64位應用程序。 您可以嘗試的另一件事是使用網格的虛擬模式,因此網格不必復制數據。 在虛擬模式下,您將獲得要繪制的每一行或單元格的回調,並從文檔存儲中為其提供數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM