Silverlight隔离存储和加载大文件

时间:2010-11-17 14:27:05

标签: database windows-phone-7 isolatedstorage

在Windows Phone 7应用程序中,我想查询使用Isolated Storage存储的大型XML文件(城市列表)。如果我这样做,文件是否会被加载到内存中(> 5 mo)?如果是这样,我还有什么其他解决方案?

编辑:

更多细节。我想使用AutoCompleteBox(http://www.jeff.wilcox.name/2008/10/introducing-autocompletebox/),但不是使用Web服务(这是固定数据,不需要在线),我想要查询文件/数据库/隔离存储...我有一个固定的城市列表。我在评论中说它是40k,但它最终似乎接近1k行。

3 个答案:

答案 0 :(得分:0)

而不是使用isolatedstorage,你可以选择使用web服务吗?或者你是否设计了一个离线方法的应用程序?

查询web服务,启用wcf或json的webservice非常简单,并且更易于维护:)

答案 1 :(得分:0)

您可以不将其分解为许多较小的文件,而不是拥有包含所有数据的大文件。 (每个城市一个?)

如果需要,您可以使用单独的文件来保留所有索引。或者,根据文件的命名,您可以使用IsolatedStorageFile.GetFileNames获取所有文件的列表。

答案 2 :(得分:0)

我会创建自己的文件格式,例如,使用字段之间的分隔符,每条记录一行。 这样,您可以逐行读取文件,以便利用以下优势填充数据结构:

  1. 无需将整个文件拉入内存
  2. 没有XML开销(在桌面应用程序中它可能不是问题,但在手机上下文中,5 MB文本文件可能会变得相当小)。
  3. 哑巴的例子:

    New York City; 12345
    Berlin; 25635
    ...
    

    编辑:鉴于该卷不是那么大,您不需要任何形式的索引或按需加载。我将如上所述存储城市 - 每行记录一次 - 将它们加载到列表中并使用LINQ选择所需的项目。这可能会很快,并使您的应用程序响应迅速。

    在这种情况下,在我看来,XML并不是这项工作的最佳工具。您的结构非常简单,以XML格式存储可能会使文件大小翻倍,这是移动设备的一个问题,也会减慢解析速度,在这种情况下也是一个问题。