2010-11-17 61 views
0

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

编辑:

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

回答

0

而不是使用isolatedstorage这个,它会是一个选项,而不是使用webservice而是...或者你设计你的应用程序的离线方法?

查询Web服务,WCF或JSON启用web服务非常简单,而且会更容易让你保持:)

+0

我会在我的应用程序中使用其他内容的web服务,但在这种情况下,它是一个城市列表。这是相当固定的,我不打算在未来添加任何城市,并且将其存储在本地保证快速访问。我想将它与AutoCompleteBox – 2010-11-17 14:40:50

+0

配对,然后您可以考虑将其分解为更小的文件(每个城市一个),并使用IsolatedStorageFile.GetFileNames列出所有文件并选择适当的城市,将会更快比查询单个文件:) – 2010-11-17 14:45:46

+0

正如我对马特所说的,城市*是*信息。我有40k行,每行只有两列(邮编和城市名称)。所以40K的文件似乎并不正确 – 2010-11-17 15:07:00

0

不是有包含所有数据的大文件,你能不能把它分解成很多较小的文件。 (每个城市一个?)

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

+0

我不认为这将是我所期待的。我的sqlite数据库中有不到40k条记录(计划将它转换为我的wp7应用程序的xml),每行包含城市名称和邮政编码。所以不知道40k文件是你想到的 – 2010-11-17 14:48:18

+0

@Thomas没有40k的文件不会是要走的路。 (但是,如果您有很多关于少数城市的数据,则可能会有26个基于城市名称首字母的文件。 – 2010-11-17 15:42:15

0

我会创建自己的文件格式,例如使用字段之间的分隔符,每条记录使用一行。 这样,你可以读你的文件中的行由行凭借这些优势,以填补你的数据结构:

  1. 没有必要将整个文件拉入内存
  2. 没有XML开销(它可以将桌面应用程序不会有问题,但在手机方面有5 MB的文本文件可能会变得相当小了些)

阿呆例如:

New York City; 12345 
Berlin; 25635 
... 

编辑:假设音量不是那么大,你不需要任何形式的索引或按需加载。我会按上面所述存储城市 - 每行一条记录 - 将它们加载到列表中,并使用LINQ来选择您需要的项目。这可能会很快,并保持您的应用程序的响应速度。

在这种情况下,在我看来,XML并不是这份工作的最佳工具。您的结构非常简单,以XML存储可能会使文件大小增加一倍,这是移动设备所关心的问题,并且还会降低解析速度,这也是本例中的一个问题。

+0

这似乎真的很奇怪的东西考虑基本usign数据库......我希望能够做简单的SELECT LIKE xxx *陈述 – 2010-11-17 16:30:14

+0

我不认为这有“hacky”,但对每个自己:-)我仍然相信在嵌入式设备中优化性能和存储非常重要。顺便说一句,如果你加载你的城市在一个列表(前例),然后与Linq,你可以做你需要的所有选择查询。 – 2010-11-17 17:51:13