Как эффективно использовать DataContractSerializer в этом случае? - PullRequest
0 голосов
/ 25 января 2011

Я хочу использовать мощный DataContractSerializer для записи или чтения данных в файл XML.

Но, как я понимаю, DataContractSerializer может только читать или записывать данные со всей структурой или списком структур.

Мой пример использования описан ниже .... Я не могу понять, как оптимизировать производительность с помощью этого API.

У меня есть структура с именем "Информация", и у меня есть List<Information> с неожиданным числомэлементы в этом списке.

Пользователь может обновлять или добавлять новый элемент в этот список очень часто.

За операцию (Добавить или Обновить) я должен сериализовать все элементы в списке к одному и тому жеФайл XML.

Итак, я напишу те же данные, даже если они не будут снова преобразованы в XML.Это не имеет смысла, но я не могу найти какой-либо подход, чтобы избежать этого.

Из-за надгробного механизма я должен сохранить всю информацию за 10 секунд.

Я боюсьпроизводительность и, возможно, задержка пользовательского интерфейса ...

Могу ли я использовать какой-либо обходной путь для частичного обновления или добавления информации о данных в файл XML с помощью DataContractSerializer?

Ответы [ 2 ]

0 голосов
/ 25 января 2011

Если производительность вызывает беспокойство, тогда используйте что-то отличное от DataContractSerializer.

Хорошее сравнение параметров: http://blogs.claritycon.com/kevinmarshall/2010/11/03/wp7-serialization-comparison/

Если размер спискабеспокойство, вы можете попробовать разбить его на меньшие списки.Наиболее подходящий способ сделать это будет зависеть от данных в вашем списке и типовых схем использования / редактирования / добавления.

В зависимости от частоты, с которой данные изменяются, вы можете попытаться сохранить их при каждом изменении.Это избавило бы от необходимости сохранять его во время, доступное для деактивации.

0 голосов
/ 25 января 2011

DataContractSerializer можно использовать для сериализации выбранных элементов - вам нужно придумать схему для идентификации измененных данных и способ ее эффективной сериализации.Например, одним из способов может быть

  1. . Вы начинаете с сериализации всего списка структур в файл.
  2. Всякий раз, когда какой-либо объект добавляется / обновляется / удаляется из списка, вы создаетеобъект diff, который идентифицирует вид изменения и объект изменился.Затем вы можете сериализовать этот объект в xml и добавить xml в файл.
  3. При чтении файла может потребоваться применить аналогичную логику, сначала прочитать список, а затем начать применять diff-файлы один за другим.
  4. Поскольку вы хотите непрерывно добавлять файлы, у вас не должно быть корневого элемента в вашем файле.Другими словами, файл с информацией о различиях не будет действительным XML-документом.Он будет содержать серии фрагментов XML.Чтобы прочитать его, вам нужно заключить эти фрагменты в объявление xml и корневой элемент.
  5. Вы можете использовать некоторую фоновую задачу для периодической записи всего списка для создания действительного файла xml.На этом этапе вы можете отказаться от файла сравнения.Идея состоит в том, чтобы имитировать транзакционную систему - одну структуру данных для сериализации / сохранения информации, а затем другую структуру, содержащую изменения (сродни журналу транзакций).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...