Как сохранить динамически заполненные наборы данных, чтобы остаться с программой? - PullRequest
2 голосов
/ 05 февраля 2009

У меня есть приложение winform, которое использует некоторые ссылочные веб-сервисы для получения данных. Возвращенные данные представляют собой массив объектов, которые я перебираю и добавляю в набор данных.

Когда я звоню в службу, для получения всех данных часто может потребоваться 2 или 3 минуты.

Если пользователь выходит из программы и возвращается позже, я не хочу, чтобы он снова загружал все данные.

Когда я запускаю приложение в режиме отладки, загруженная информация не сохраняется; что меня беспокоит.

Я все еще в "режиме разработки", поэтому я еще не собрал установщик, чтобы проверить, остается ли информация в приложении.

Мне любопытно несколько вещей:

  1. Сохраняются ли данные, хранящиеся в наборе данных, после выхода пользователя?
  2. Если нет, что бы вы посоветовали, как этого добиться?
  3. Я рассмотрел XML для хранения; Это лучший вариант, когда у вас есть 9-10 МБ данных?
    Изменить: окончательный результат: ОК - вот итоговый результат (спасибо всем за быстрый ответ)

Когда приложение закрывается, я вызываю функцию для сохранения данных. Вот фрагмент кода:

   using System.IO;
   using System.Runtime.Serialization;
   using System.Runtime.Serialization.Formatters.Binary;            
   FileStream fs;
   IFormatter formatter = new BinaryFormatter();
    //activities
    if (actList.Length > 0)
    {
        fs = new FileStream("activities.bin", FileMode.Create, FileAccess.Write, FileShare.None);
        formatter.Serialize(fs, actList);
        fs.Close();
    }
    //users
    if (userList.Length > 0)
    {
        fs = new FileStream("users.bin", FileMode.Create, FileAccess.Write, FileShare.None);
        formatter.Serialize(fs, userList);
        fs.Close();
    }

Параметры userList и actList - это объекты List, полученные из вызова веб-служб.

Еще одна вещь, которую я реализовал (немного не по теме), - создать настройку приложения для сохранения, когда пользователь последний раз делал загрузку из веб-службы. Сохранено как

Properties.Settings.Default.last_downloaded

Если пользователь нажимает кнопку загрузки, ему предлагается указать дату, когда он последний раз выполнял загрузку, и ему предоставляется возможность сказать «нет».

Еще раз спасибо за вашу помощь!

Ответы [ 2 ]

2 голосов
/ 05 февраля 2009

Объект .NET не имеет персистентности, если вы не пишете его самостоятельно - например, путем сериализации в файл в профиле пользователя (или изолированное хранилище для ClickOnce).

Примечание: лично я бы вообще не использовал DataSet в этом сценарии; если вы загружаете данные в виде списка объектов, просто сохраните их в таком виде - List<T> и т. д.

Re xml: 9-10Mb - большой, но не огромный. Это действительно зависит от характера данных и других требований; если вы уже не используете веб-сжатие (GZIP и т. д.), вы можете обнаружить, что данные быстрее передаются с помощью более компактного формата, такого как CSV, или двоичного формата, такого как буфер протокола .

1 голос
/ 05 февраля 2009

Вам необходимо вручную сохранить любые данные, которые вы хотите сохранить. Что вы можете сделать, это взять свой набор данных и, когда ваше приложение закрывается, сериализовать набор данных в файл. Затем, когда приложение откроется, если файл существует, десериализуйте набор данных из этого файла вместо вызова веб-службы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...