我想要在设备中加载项目列表,当我尝试将它们全部加载到内存中时,我的应用程序会向我发送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来说似乎没有同样的方式。
答案 0 :(得分:3)
要在移动设备上管理那么多数据,您应该使用紧凑/精简数据库,例如SQL Server Compact,SQLite或Firebird Embedded。
您可以自己管理数据,但您会发现您正在重新发明轮子。正如文章所建议的那样,不要使用内存进行调整,而是使用SQL Server Compact的索引和其他内置内存管理。像你描述的那样的查找对于这样的引擎来说是微不足道的。
答案 1 :(得分:2)
你的“尽可能快”很有趣。你必须首先解决OOM。
您的用户不想同时处理500K的任何内容。
按照Google的示例:您的网络搜索会返回数百万次点击,但他们会按优先顺序一次发回25次。这也是你应该做的。
最好使用像SQLite3这样的数据库并模仿Google。
答案 2 :(得分:0)
如果它是原始二进制文件,那么我将其打开为memory-mapped file。如果你很幸运并且“items”是固定宽度并按某个值排序,二进制搜索将非常快,并且映射它可能只需要64k的RAM。