Сохранять список <int>через завершения работы приложений - PullRequest
0 голосов
/ 22 июля 2010

Короткая версия

У меня есть список int с, который мне нужно выяснить, как сохранить при завершении работы приложения.Не навсегда, но, вы поняли, я не могу позволить списку исчезнуть, пока с ним не разберется.Метод борьбы с ним удалит записи в списке.

Какие у меня варианты?XML?

Фон

У нас есть приложение WinForm, использующее локальные базы данных SQL Express, которые участвуют в репликации слиянием с центральным сервером.Это будет трудно объяснить, но у нас также есть (вроде) Сервер I-Series 400, на который также записывается небольшая часть данных.По разным причинам I-серия недоступна при репликации, и поэтому все «записи» в нее необходимо выполнять, пока она доступна.

Моя первая мысль, чтобы решить эту проблему, состояла в том, чтобы просто иметь объект List, которыйсохранил PK, который нужно было обновить.Затем, после успешной синхронизации, у меня будет метод, который проверяет этот список и вызывает UpdateISeries() один раз для каждого ПК в списке.Я почти уверен, что это сработает, за исключением случая, когда они отключатся ненадлежащим образом или потеряют власть и т. Д. Итак, у кого-нибудь есть лучшие идеи, как решить эту проблему?Возможно, файл XML, хотя я никогда не делал этого.Я беспокоюсь о том, чтобы создать таблицу в SQL Express из-за репликации .... может быть необоснованным, но ...

Для справки UpdateISeries(int PersonID) - это существующий метод в DLL, который используется внутри.Переписать его, как потенциальное решение этой проблемы, на самом деле нереально.

Ответы [ 3 ]

3 голосов
/ 22 июля 2010

Похоже, вам нужно сериализовать и десериализовать некоторые объекты.

См. эти .NET темы, чтобы узнать больше.

со связанной страницы:

Сериализация - это процесс преобразования состояния объекта в форму, которую можно сохранить или перенести. Дополнением сериализации является десериализация, которая преобразует поток в объект. Вместе эти процессы позволяют легко хранить и передавать данные.

Если не важно, чтобы формат на диске был читаемым человеком, и вы хотите, чтобы он был как можно меньшего размера, посмотрите на двоичную сериализацию .

1 голос
/ 22 июля 2010

Использование механизма сериализации - это, пожалуй, лучший способ.Вот пример использования BinaryFormatter .

public void Serialize(List<int> list, string filePath)
{
  using (Stream stream = File.OpenWrite(filePath))
  {
    var formatter = new BinaryFormatter();
    formatter.Serialize(stream, list);
  }
}

public List<int> Deserialize(string filePath)
{
  using (Stream stream = File.OpenRead(filePath)
  {
    var formatter = new BinaryFormatter();
    return (List<int>)formatter.Deserialize(stream);
  }
}
0 голосов
/ 22 июля 2010

Если у вас уже есть база данных SQL и вы взаимодействуете с ней, используйте ее, чтобы получить более простой код с меньшим количеством зависимостей. Репликацию можно настроить так, чтобы она игнорировала дополнительные таблицы (даже если вам нужно поместить их в другую схему). Таким образом, вы можете избежать ряда потенциальных проблем с повреждением данных.

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