2010-11-17 57 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