5

我得到了一个用 .Net CF 3.5 编写的 Windows Mobile 应用程序来修复,其中一个问题与存储有关。

消息“没有足够的存储空间来完成此操作”已经出现了几次 - 它记录在 SQL CE 数据库中,并且总是在数据访问期间发生(但不是同一位数据访问)。

我有点困惑的是这是指程序内存(例如 RAM)还是存储内存(例如永久存储)。它似乎是存储内存,但这些设备似乎有足够的空闲空间。虽然有一些 OutOfMemoryExceptions,但这些似乎与此问题完全无关(因为与图像相关的问题,这种情况发生在不同的时间)。

我们使用带有单个连接的 SQL CE 3.5,它与应用程序一起存储在设备上(而不是存储卡)。该设备是运行 Windows Mobile 6.1 的摩托罗拉 MC75。

有什么想法吗?

4

3 回答 3

8

这是一个低级 Windows 错误,代码 14,ERROR_OUTOFMEMORY。错误消息没有提到“内存”,因为它并不总是由内存不足引起的。最典型的触发器是程序超出其内核资源配额。像 10,000 个窗把手一样,还有很多其他的。顺便说一句,那是桌面版,我不怀疑它在 Windows Mobile 上要低得多。

好吧,该程序是一个小猪。触发此错误的一种可能方法是不对实现 IDisposable 的类的对象调用 Dispose()。这将消耗在垃圾收集器和终结器线程运行之前不会释放的内核资源。这可能需要一段时间。SQL CE 类当然是候选者。如果您不知道资源泄漏或过度使用的来源,请投资一个适用于 CF 的分析器。

于 2010-05-21T11:50:21.640 回答
0

分配了多少虚拟内存?如果可能,请尝试增加该值。

于 2010-05-21T11:02:18.353 回答
0

我不知道这是否也适用于 MC75,但Start->Settings->Control Panel->System应该有一个内存选项卡,您可以在其中调整有多少内存可用作 RAM,以及保留多少用于存储文件。

这不适用于 \Permanent Storage 文件夹(或 \Storage Card,因为它在我们的设备上被调用),但适用于其他文件夹,如 \Temp。

于 2010-05-21T11:37:59.033 回答