Вот еще одна альтернатива. Заархивируйте файл и вставьте его в папку clientBin рядом с приложением XAP. Затем в той точке приложения, где требуется контент, сделайте что-то вроде этого: -
public void GetWordFrequencyResource(Action<string> callback)
{
WebClient client = new WebClient();
client.OpenReadAsync += (s, args) =>
{
try
{
var zipRes = new StreamResourceInfo(args.Result, null)
var txtRes = Application.GetResourceStream(zipRes, new Uri("WordFrequency.txt", UriKind.Relative));
string result = new StreamReader(txtRes.Stream).ReadToEnd();
callback(result);
}
catch
{
callback(null); //Fetch failed.
}
}
client.OpenReadAsync(new Uri("WordFrequency.zip", UriKind.Relative"));
}
Использование: -
var wordFrequency = new Dictionary<string, int>();
GetWordFrequencyResource(s =>
{
// Code here to burst string into dictionary.
});
// Note code here is asynchronous with the building of the dictionary don't attempt to
// use the dictionary here.
Приведенный выше код позволяет хранить файл в эффективном формате zip, но не в самом XAP. Следовательно, вы можете скачать его по требованию. В нем используется тот факт, что XAP является zip-файлом, поэтому Application.GetResourceStream
, предназначенный для извлечения ресурсов из XAP-файлов, можно использовать в zip-файле.
Кстати, я не предлагаю вам использовать словарь, я просто использую словарь в качестве простого примера. На самом деле, я думаю, что файл в отсортированном порядке. Если это так, вы можете использовать KeyValuePair<string, int>
для каждой записи, но создать собственный тип коллекции, который хранит их в массиве, или List
, а затем использовать некоторые методы двоичного поиска для индексации в нем.