C#on windows ce 6.0 OutOfMemoryException

时间:2013-07-15 19:13:36

标签: c# windows-mobile compact-framework windows-ce out-of-memory

我想要在设备中加载项目列表,当我尝试将它们全部加载到内存中时,我的应用程序会向我发送OutOfMemoryException
我的应用程序加载500,000 items,我需要以最快的方式访问它们(最终用户不希望在扫描项目后等待30秒以查看它是否存在于列表中)。
我正在使用compact framework 3.5 I无法访问任何无线网络,并且该文件作为设备中的二进制文件存在。

我需要像http://blogs.msdn.com/b/robtiffany/archive/2009/04/09/memmaker-for-the-net-compact-framework.aspx这样的东西,但对于CE 6.0来说似乎没有同样的方式。

3 个答案:

答案 0 :(得分:3)

要在移动设备上管理那么多数据,您应该使用紧凑/精简数据库,例如SQL Server CompactSQLiteFirebird Embedded

您可以自己管理数据,但您会发现您正在重新发明轮子。正如文章所建议的那样,不要使用内存进行调整,而是使用SQL Server Compact的索引和其他内置内存管理。像你描述的那样的查找对于这样的引擎来说是微不足道的。

答案 1 :(得分:2)

你的“尽可能快”很有趣。你必须首先解决OOM。

您的用户不想同时处理500K的任何内容。

按照Google的示例:您的网络搜索会返回数百万次点击,但他们会按优先顺序一次发回25次。这也是你应该做的。

最好使用像SQLite3这样的数据库并模仿Google。

答案 2 :(得分:0)

如果它是原始二进制文件,那么我将其打开为memory-mapped file。如果你很幸运并且“items”是固定宽度并按某个值排序,二进制搜索将非常快,并且映射它可能只需要64k的RAM。