Показать сообщение отдельно
Старый 09.06.2010, 01:48   #5
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Полу урок: Сериализация. Часть 1

Спасибо за статью, всем, кто не работал с сериализацией будет полезна . От себя хотел бы добавить:

1. В данном примере используется конструктор XmlSerializer(type). В МСДН по этому поводу написано:

Динамически сгенерированные сборки.
Для повышения производительности инфраструктура сериализации XML динамически генерирует сборки для сериализации и десериализации указанных типов. Инфраструктура обнаруживает и повторно использует данные сборки. Такое поведение происходит только при использовании следующих конструкторов:

XmlSerializer.XmlSerializer(Type)

XmlSerializer.XmlSerializer(Type, String)

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

2. Функция WriteEntity на мой взгляд дублирует информацию в памяти аш два раза. Ее можно записать на много проще и оптимальнее:
        public static void WriteEntity(object obj, string fileFullPath)
        {
            XmlSerializer sr = GetSerializer(obj.GetType());
            using (FileStream fs = File.Create(fileFullPath))
            {
                sr.Serialize(fs, obj);
            }
        }
Вроде все что хотел сказать
Еще раз спасибо за статью!
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
Dream (09.06.2010), Randomize (09.06.2010)