0

我有一个要加载到设备中的项目列表,当我尝试将它们全部加载到内存中时,我的应用程序向我抛出了一个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。

4

3 回答 3

3

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

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

于 2013-07-15T19:18:12.593 回答
2

你的“尽可能快”很有趣。你得先理清OOM。

您的用户不想同时处理 500K 的任何东西。

效仿 Google 的示例:您的网络搜索返回数百万次点击,但它们一次返回 25 个,按优先级排序。这也是你应该做的。

最好使用 SQLite3 之类的数据库并模仿 Google。

于 2013-07-15T19:30:51.077 回答
0

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

于 2013-07-16T05:25:05.550 回答