在metro应用程序中存储大量数据

时间:2012-06-08 14:13:39

标签: c# storage windows-8 microsoft-metro

我想将世界城市存储在一个列表中,因为metro应用程序不能拥有本地数据库,但我不确定它是否可行(我找到了一个超过300万个城市的文本文件)。

我想知道他们是如何在天气应用中做到的。由于建议的结果没有潜伏(在搜索魅力或“最喜欢的地方”屏幕),我不认为他们使用网络服务,我也希望我的应用程序能够提出一个城市列表甚至如果没有可用的连接。

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

只需将其粘贴在由行分隔的文本文件中即可。这不是大量数据 - 您可以一次性将其全部保存在RAM中。

仅为这一个列表使用数据库似乎有点矫枉过正。

通过一些粗略的计算,假设每个大约20个字符的名字,我在大约100MB的城市数据区域。对于内存中的一个列表而言,这并不是微不足道的 - 但是,它不是必须要与之抗衡的。

您甚至可以使用类似Linq to Text提供商的内容。

<小时/> 他们如何在魅力中完成它只是担心几个城市 - 最喜欢的和你上次报告的位置服务。处理&lt; 10比300万容易。

答案 1 :(得分:1)

300万个城市可能听起来很多。但是你的Metro应用程序有很多吗?

这些估计非常粗略

让我们使用20个unicode字符的平均城市名称长度。

20 * 300万= 6000万个unicode字符。

每个unicode字符6000万* 2字节= 1.2亿字节。

1.2亿字节/ 1024 = 117,187.5千字节

117,187.5千字节/ 1024 = 114兆字节

~115mb并不完全&#39;小&#39;但根据您的其他要求 - 您可以处理将150mb加载到内存中。您可以使用您通常使用的任何.NET对象,例如List,并使用LINQ来获取匹配的城市或其他任何内容。

不要说这是你唯一的选择。它可能只是一个可行的。有很多非常聪明的东西你可以做,以避免一次把所有的东西都拉进内存;但如果你想消除/减少滞后 - 这将是你最好的选择。

答案 2 :(得分:1)

如果您需要数据库,我建议您查看SQLite。 Metro应用程序显然无法访问SQL Server和其他基于Win32的DBMS,但您可以尝试使用SQLite作为轻量级替代方案。

试试这个:https://github.com/doo/SQLite3-WinRT

答案 3 :(得分:0)

我们建议将SQLite数据库与LinqConnect一起使用 - Devart的支持SQLite的LINQ to SQL兼容解决方案。您可以在我们的产品中使用LINQ和ADO.NET接口。从4.0版本开始,LinqConnect支持Windows Metro应用程序:http://blogs.devart.com/dotconnect/linqconnect-for-metro-quick-start-guide.html