Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
В поиске
104 / 52 / 17
Регистрация: 20.04.2014
Сообщений: 826

Медленная первая десериализация

05.03.2023, 22:06. Показов 727. Ответов 9

Студворк — интернет-сервис помощи студентам
Код рабочий ОКУД0420820_2_16_4_2 и ОКУД0420820_2_16_4_1 грубо говоря на 5000 строчек фаил весит всего 200 Кб
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    XmlSerializer xmlSerializer = null;
 
    switch (LocalName)
    {
        case nameof(ОКУД0420820_2_16_4_2):
            xmlSerializer = new(typeof(ОКУД0420820_2_16_4_2));
            break;
        default:
            xmlSerializer = new(typeof(ОКУД0420820_2_16_4_1));
            break;
    }
 
    ОКУД0420820 temp = null;
    using (FileStream fs = new(filePath, FileMode.OpenOrCreate))
    {
        temp = xmlSerializer.Deserialize(fs) as ОКУД0420820;
    }
но при первой загрузки программа замирает секунды на 3-4, а последующие файлы считывает махом.
Если я правильно понял где та какая то библиотека в ленивой загрузке но вот как заставить чтобы все прогрузилось.
хотя подвисает при первом прочтении как ОКУД0420820_2_16_4_2 так и ОКУД0420820_2_16_4_1 значит наверное не в библиотеке проблема.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.03.2023, 22:06
Ответы с готовыми решениями:

Сериализация и десериализация. Записывается только первая строка
Всем добрый вечер. Подскажите если можете в чем может быть проблема. У меня есть коллекция которую я сериализую в xml фалик. Вроде файлик...

Aser v5 i7 u - очень медленная загрузка системы и такая же медленная работа приложений
Всем привет. Полгода назад купил ноут ( aser v5 i7 u) . Все было нормально, но неделю назад начал не много тормозить, всегда долго...

Первая ли книга как первая для JavaScript?
]Здравствуйте, хотел бы изучить JavaScript. Мои знания на данный момент: HTML/CSS, основы С++. Есть в наличии данная книга:...

9
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
05.03.2023, 23:42
Цитата Сообщение от КВА696 Посмотреть сообщение
Если я правильно понял где та какая то библиотека в ленивой загрузке
XmlSerializer при первом создании экземпляра для определенного типа сканирует этот тип, строит внутреннюю модель и кеширует ее как отдельную сборку.
Можете сделать сериализаторы статическими, чтобы все это дело выполнялось при загрузке программы/сборки:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
static class Serializers
{
   public static readonly XmlSerializer ОКУД0420820_2_16_4_2 = new(typeof(ОКУД0420820_2_16_4_2));
   public static readonly XmlSerializer ОКУД0420820_2_16_4_1 = new(typeof(ОКУД0420820_2_16_4_1));
}
 
    XmlSerializer xmlSerializer = LocalName switch 
    {
        nameof(ОКУД0420820_2_16_4_2) => Serializers.ОКУД0420820_2_16_4_2,
        _ => Serializers.ОКУД0420820_2_16_4_1
    };
 
    ОКУД0420820 temp = null;
    using (FileStream fs = new(filePath, FileMode.OpenOrCreate))
    {
        temp = xmlSerializer.Deserialize(fs) as ОКУД0420820;
    }
Если целевых типов больше, то вместо статических полей и switch затолкайте их в статический же словарь с ключом по типу.
2
В поиске
104 / 52 / 17
Регистрация: 20.04.2014
Сообщений: 826
06.03.2023, 14:17  [ТС]
kolorotur, Спасибо, но увы это мне не помогло ни что не изменилось все так же 2-3 секунды думает. Да и ладно с ними.
Видимо вопрос кроется где то внутри Deserialize.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
06.03.2023, 16:26
КВА696, так замерьте профайлером где именно затык происходит
1
В поиске
104 / 52 / 17
Регистрация: 20.04.2014
Сообщений: 826
06.03.2023, 16:30  [ТС]
kolorotur, А не дадите ссылку что такое профайлер и как с ним работать. А то это для меня новое слово))
Вот об этом речь?
0
В поиске
104 / 52 / 17
Регистрация: 20.04.2014
Сообщений: 826
06.03.2023, 16:43  [ТС]
kolorotur, Если замерять как я выше скриншот дал. то у меня как то не понятно получилось.
Несмотря на то что он статик он все равно тратит на неё время
C#
1
2
3
4
5
XmlSerializer xmlSerializer = LocalName switch
            {
                nameof(ОКУД0420820_2_16_4_2) => Serializers.ОКУД0420820_2_16_4_2,
                _ => Serializers.ОКУД0420820_2_16_4_1
            };
и на чтение с первого раза xmlSerializer.Deserialize(fs) тоже тратит а при последующих эти два места пробегает быстро.

https://www.youtube.com/watch?v=tYjUqEDneyU
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
06.03.2023, 18:39
Лучший ответ Сообщение было отмечено КВА696 как решение

Решение

Цитата Сообщение от КВА696 Посмотреть сообщение
Вот об этом речь?
Он в Студии довольно простенький, но в принципе оно, ага.

Цитата Сообщение от КВА696 Посмотреть сообщение
Несмотря на то что он статик он все равно тратит на неё время
Могу только предположить, что я неправильно назвал место генерации сборки для сериализации: вполне возможно, что XmlSerializer делает это не в конструкторе, а при первой сериализации/десериализации.

Можете при загрузке сборки попробовать запустить холостую сериализацию чтобы "прогреть" объекты:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
static class Serializers
{
    [ModuleInitializer]
    internal static void Warmup()
    {
        using var ms = new MemoryStream();
        
        ОКУД0420820_2_16_4_1.Serialize(ms, new ОКУД0420820_2_16_4_1());
        ms.Position = 0;
        ОКУД0420820_2_16_4_1.Deserialize(ms);
 
        long pos = ms.Position;
        ОКУД0420820_2_16_4_2.Serialize(ms, new ОКУД0420820_2_16_4_2());
        ms.Position = pos;
        ОКУД0420820_2_16_4_2.Deserialize(ms);
 
    }
    
    public static readonly XmlSerializer ОКУД0420820_2_16_4_2 = new(typeof(ОКУД0420820_2_16_4_2));
    public static readonly XmlSerializer ОКУД0420820_2_16_4_1 = new(typeof(ОКУД0420820_2_16_4_1));
}
1
В поиске
104 / 52 / 17
Регистрация: 20.04.2014
Сообщений: 826
06.03.2023, 19:48  [ТС]
kolorotur, Спасибо. Это ближе к тому что я хотел но увы помогло ровно на половину))
первую .Deserialize(fs) все равно долго считывает. Но со switch работает.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
06.03.2023, 19:52
Цитата Сообщение от КВА696 Посмотреть сообщение
увы помогло ровно на половину
Ну остальные факторы тоже со счетов списывать не стоит: JIT должен откомпилировать метод, рантайм может подгрузить какие-то сборки для работы с файловой системой, сама файловая система должна найти и загрузить страницу с диска (если диск механический, медленный и фрагментированный, то будет еще веселее), антивирус просканировать куда вы там пытаетесь залезть, мониторинг отправить скриншоты в майкрософт и пр.
В общем, дел непочатый край
1
1168 / 886 / 517
Регистрация: 09.04.2014
Сообщений: 2,102
06.03.2023, 22:02
может поможет
https://stackoverflow.com/ques... mbly-value
https://learn.microsoft.com/en... l-sgen-exe
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.03.2023, 22:02
Помогаю со студенческими работами здесь

Массив С состоит из элементов исходных массивов, первая цифра которых меньше последней, а массив D – первая ц
Даны два одномерных массива целых чисел (массив А, состоящий из n элементов, массив В – из m элементов), заполненных случайным образом...

Первая игра...первая загвоздка...
Вот задание Процедуры я написал, но как все это вместе скомпановать не знаю. Вот тарелка Procedure...

Медленная загрузка
Всем привет! Вот с такой проблемой столкнулся:(При включении ноутбука,Windows грузится по 15 минут,потом отлично и без тормозов боцает....

Медленная флешка 64 гб
Здравствуйте! Приобрёл у китайцев флешку DT106 на 64 Гб, но мне кажется, что она медленная: чтение 109 Мб\с, а запись 15 по...

Медленная работа с БД
Две программы на Delphi обращаются к одной БД. Проблема в том, что когда одна программа вносит изменения, вторая программа видит эти...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru