2010-05-21 75 views
4

我已經給出了一個用.Net CF 3.5編寫的Windows Mobile應用程序來解決問題,其中一個問題是存儲問題。沒有足夠的存儲空間來完成此操作 - 程序或存儲器?

消息'沒有足夠的存儲空間可用於完成此操作'已出現幾次 - 它記錄在SQL CE數據庫中,並且始終在數據訪問期間發生(但不是數據訪問的相同位)。

我有點困惑的是這是指程序存儲器(例如RAM)還是存儲器(e ..g永久存儲器)。它似乎是存儲內存,但設備似乎有很多免費的。雖然有一些OutOfMemoryException異常,但這些與這個問題完全無關(因爲與圖像相關的問題在不同的時間發生)。

我們將SQL CE 3.5與單個連接一起使用,該連接與設備上的應用程序一起存儲(與存儲卡相對)。該設備是運行Windows Mobile 6.1的摩托羅拉MC75。

有什麼想法?

回答

8

這是一個低級別的Windows錯誤,代碼14,ERROR_OUTOFMEMORY。錯誤消息沒有提及「內存」,因爲它並不總是由內存不足引起的。最典型的觸發器是一個超出內核資源配額的程序。像10,000個窗口手柄一樣,還有很多其他的。這是桌面版的順便說一句,我不懷疑它在Windows Mobile上低得多。

那麼,該計劃是一個小豬。觸發此錯誤的一種可能方式是不對實現IDisposable的類的對象調用Dispose()。這將消耗在垃圾收集器和終結器線程運行之前不會被釋放的內核資源。這可能需要一段時間。 SQL CE類當然是候選人。如果您不知道資源泄漏或過度使用來自何處,那麼投資一個適用於CF的分析器。

+1

謝謝,這很有用。雖然它看起來像ERROR_NOT_ENOUGH_MEMORY是用於消息'沒有足夠的存儲可用來處理此命令'。根據以下頁面,消息「沒有足夠的存儲空間可用於完成此操作」(我收到)是代碼14,ERROR_OUTOFMEMORY: http://msdn.microsoft.com/en-us/library/ ms681382(VS.85).aspx 雖然我無法找到這兩個代碼之間的區別是什麼。你知道,你的答案是否仍然適用於錯誤代碼14? 在此期間,我會看看那些「使用」語句... – 2010-05-21 13:03:59

+0

是的,我認爲是。得到了錯誤的,看起來像一個DDE錯誤。 – 2010-05-21 13:10:00

0

分配了多少虛擬內存?儘可能增加價值。

+0

我不確定我是否知道你的意思,這是否與deltreme提到的內存設置有關? – 2010-05-21 12:51:00

+0

虛擬內存在任何CE版本中都不可調整。 – ctacke 2010-05-21 13:14:24

0

我不知道這是否也適用於MC75,但在Start->Settings->Control Panel->System上應該有一個內存選項卡,您可以在其中調整有多少內存可用作RAM,以及爲存儲文件保留多少內存。

這不適用於\永久存儲文件夾(或\存儲卡,因爲它在我們的設備上調用),但不適用於\ Temp等其他文件夾。

+1

有一個內存頁面,但無法調整它 - 根據我的理解,這在WM6中不再可行,因爲這兩個內存在邏輯上(甚至可能是物理上)是分開的。不知道問題出在哪個內存上,我不知道該怎樣調整它! – 2010-05-21 12:43:06

相關問題