【问题标题】:Not enough storage is available to complete this operation - Program or Storage memory?没有足够的存储空间来完成此操作 - 程序或存储内存?
【发布时间】:2011-02-22 07:27:25
【问题描述】:

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

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

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

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

有什么想法吗?

【问题讨论】:

    标签: .net compact-framework windows-mobile-6


    【解决方案1】:

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

    【讨论】:

    • 我不确定我明白你的意思,这是否与 deltreme 提到的内存设置有关?
    • 虚拟内存在任何版本的 CE 中都不可调整。
    【解决方案2】:

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

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

    【讨论】:

    • 有一个内存页面,但您无法调整它 - 据我了解,这在 WM6 中不再可能,因为这两个内存在逻辑上(甚至可能在物理上)是分开的。如果不知道问题出在哪块内存上,我也不知道用哪种方法来调整它!
    【解决方案3】:

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

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

    【讨论】:

    • 谢谢,这很有用。虽然看起来 ERROR_NOT_ENOUGH_MEMORY 用于消息“没有足够的存储空间来处理此命令”。消息“没有足够的存储空间来完成此操作”(我得到的)是代码 14,ERROR_OUTOFMEMORY,根据以下页面:msdn.microsoft.com/en-us/library/ms681382(VS.85).aspx 虽然我找不到这两个代码之间的区别是什么.你知道吗,你的答案是否仍然适用于错误代码 14?与此同时,我会检查那些“使用”语句......
    • 是的,我想是的。弄错了,看起来像是 DDE 错误。
    猜你喜欢
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多