Как сохранить справочные данные
После каждого первого запуска приложения я загружаю все необходимые справочные данные (текстовый файл (формат csv) размером 1 МБ). Эти данные содержат около 30000 строк, и каждая строка представляет собой запись данных с именем, широтой, долготой и высотой.
Какой самый эффективный способ сохранить эти данные? Я попытался сохранить их список в IsolatedStorageSettings. Но это абсолютно худший подход.
Другой способ - сохранить текстовый файл в каталоге IsolatedStorageFile и при каждом запуске приложения загружать файл и анализировать его в моем списке.
Самая несоответствующая часть читает файл. Так что я думаю, что использование базы данных, такой как sqlite, имеет ту же проблему, не так ли?
Как бы вы относились к этой проблеме?
С наилучшими пожеланиями, Дэнни
1 ответ
Я сделал нечто подобное в приложении WherOnEarth. У нас есть база данных SQLCE, в которой мы храним данные, а затем загружаем то, что рядом.
Фоновое чтение: http://www.silverlightshow.net/items/Windows-Phone-7.1-Local-SQL-Database.aspx & http://www.jeffblankenburg.com/2011/11/30/31-days-of-mango-day-30-local-database/
У меня есть файл sdf, который я отправляю вместе с приложением, класс данных показан ниже
[Table]
public class PointData : IPositionElement, INotifyPropertyChanged
{
[Column]
public string Description { get; set; }
[Column]
public double Latitude { get; set; }
[Column]
public double Longitude { get; set; }
Затем мы читаем пункты, которые находятся рядом, я получаю их со следующим:
(from ht in _context.Points
where ht.Latitude >= bottomLeft.Latitude && ht.Latitude <= topRight.Latitude &&
ht.Longitude >= bottomLeft.Longitude && ht.Longitude <= topRight.Longitude
select ht
).ToArray();
Этот подход был достаточно быстрым для меня (т. Е. Потребовалось меньше времени для извлечения элементов из файла sdf, чем для размещения их на экране и выполнения всех других связанных с этим математических операций). Я не пытался получить 300000 элементов из БД. Было больше оптимизаций, которые я мог бы сделать в отношении индексации и тому подобного, но, как я уже сказал, в данный момент это было достаточно быстро, поэтому я еще вернусь к нему позже.