Здравствуйте, VladD2, Вы писали:
AVK>>Имхо проще зип вставить в сериалайзер
VD>Да можно сделать одну функцию. На входе датасет, а не выходе зипованный стрим.
Здравствуйте, AndrewVK, Вы писали:
AVK>А еще лучче ченнел синк пакующий.
Не не лучше. От тормозов это не избавит. Я тебе уже кажется наглядно продемонстрировал, что основные тормоза от форматера.
Так фоматер просто ничего не будет делать (все пойдет мимо него). А с черелом будет полная задница. Весь геморой с сериализацией датасета + все пойдет в текстовм виде. А так все пойдет через DIME.
Есть правда вариант... Форматеры поддерживают такую фичу как System.Runtime.Remoting.Messaging.RemotingSurrogateSelector.
Я так понимаю, возможно с его помощью можно будет делать "правильную" сериализацию автоматом.
... << RSDN@Home 1.0 beta 6a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Сериализация в дотнете (самопальный датасет)
Здравствуйте, AndrewVK, Вы писали:
AVK>Чего? Сборка мусора синхронна и останавливает все потоки.
Гы-гы.
GC.Collect() — это не сборка мусора, а только ее запуст. Как я понимаю сборка производится из потока с меньшим приоритетом и она просто будет спать если ее не подождать.
Если хочешь дождаться окончани (а видимо, и начала) сборки нужно вызывать:
GC.Collect();
GC.WaitForPendingFinalizers();
... << RSDN@Home 1.0 beta 6a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Сериализация в дотнете (самопальный датасет)
Здравствуйте, VladD2, Вы писали:
AVK>>А еще лучче ченнел синк пакующий.
VD>Не не лучше. От тормозов это не избавит. Я тебе уже кажется наглядно продемонстрировал, что основные тормоза от форматера.
Я ж не говорю что это нужно взамен сериалайзера, я предлагаю это как способ подключения паковщика.
VD>Так фоматер просто ничего не будет делать (все пойдет мимо него). А с черелом будет полная задница. Весь геморой с сериализацией датасета + все пойдет в текстовм виде. А так все пойдет через DIME.
Форматтер это тоже синк в канале.
VD>Есть правда вариант... Форматеры поддерживают такую фичу как System.Runtime.Remoting.Messaging.RemotingSurrogateSelector.
VD>Я так понимаю, возможно с его помощью можно будет делать "правильную" сериализацию автоматом.
Можно. Этой фишкой пользуются, когда подменяют MBR на ObjRef
Здравствуйте, mihailik, Вы писали:
M>Да, правильно! M>Беру свои слова обратно, types[i] стоит построить. MyTypes.Int32 всё-таки заменить на typeof(int).
typeof(int) возвращает объект. Причем кажды раз! Сравнение объектных ссылок само по себе менее эффективно чем интов (из-за того что это приводит к виртуальным вызовам), так к тому же еще typeof() — это вызов серьезной функции.
На С++ такое влет прокатило бы (из-за оптимизации и более низкоуровневой технологии сравнения ссылок). А на Шарпе точно нужно делать отдельный массив.
В общем попробуй и замерь.
... << RSDN@Home 1.0 beta 6a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Сериализация в дотнете (самопальный датасет)
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, VladD2, Вы писали:
VD>>1. typeof(int) = это функция которую тупой Шарповый компилятор не догадается вынести из цыкла.
AVK>Это оператор
Хрен. Глянь анакриной/илдасмом. Да и просто замерь скорость. Я тут как-то из твоего лихого примера (загрузки сборок, если не ошибаюсь) вынес typeof(...) за пределы цикла и получил серьезный выигрыш.
Type — это уже само по себе тяжелый объект. Он является оберткой над метаданными. Метаданные в дотнете — это не константы. Это огромные динамические структуры информация о которых хранится в сборках. Даже приметивы описаны в сборке (если не ошибаюсь в mscoree.lib). Так что сначала в стек закладывается токен (действительно констатна), а затем вызывается относительно навароченная функция которая по нему ищет объект типа Type.
VD>>2. Каждая точка и пара скобок являются кучей лишнего кода. (dt.Columns[i].DataType)
M> M>Внешние скобки — это синтаксис оператора if.
Я имел в виду квадратные скобки.
VD>>Лучше все это дело сложить в массив (оптимально int-ов) и проверять уже его (см. постинг рядом).
M>Глупость какая-то. Давай тогда и к массиву применим твой "пункт 2". Из него тоже всё в массив выгрузим, "и проверять уже его"
Короче, попробуй... А глупость... наверно... для тех кто не понимает сути происходящего. Я видимо слишком долго писал на С и привык оценивать код с точки зрения того что он порождает на самом деле.
... << RSDN@Home 1.0 beta 6a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Сериализация в дотнете (самопальный датасет)
Здравствуйте, desperado_gmbh, Вы писали:
VD>>1. typeof(int) = это функция которую тупой Шарповый компилятор не догадается вынести из цыкла.
DG>Это не функция, а загрузка константы через ldtoken.
Здравствуйте, AndrewVK, Вы писали:
AVK>Я ж не говорю что это нужно взамен сериалайзера, я предлагаю это как способ подключения паковщика.
А. Ну, это разумно. Вот только может оказаться проблематично передавать бинарные данные по http. Я ведь говорил о передачи в виде DIME-атача. Хотя если знать формат DIME, можно наверно все данные по нему качать. Такой легкий способ борьбы с фаерволами. А в теле вызова передавать строчку "Фаерволы идут лесом (с) IT"
AVK>Форматтер это тоже синк в канале.
Тогда нужно вести речь о самопальном форматере. Но это уже не так просто.
AVK>Можно. Этой фишкой пользуются, когда подменяют MBR на ObjRef
Ладно. Сделать рукопашнену для датасета можно за час-другой уже сейчас. А с RemotingSurrogateSelector еще капать и капать.
... << RSDN@Home 1.0 beta 6a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
У тебя в тесте была ошибка. Ты писал данные Soap-фрматера в стрим Binary-форматера. Что увеличивало размер последнего.
Видимо из-за этого и менялись результаты при перестановках. Я переписал твой сериализатор сделав его полностью бирантым и оптимизировав те места которые мне показались наиболее требовательными к времени. Так же сделал подсчет загрузки. Результаты оказались настлько забавными что решил создать отдельную тему.
Попутно обнаружил серезный недостаток. Дело в том, что ты не расчитываешь на то, что ячейки могут содержать DbNull. Т.е. этот вариант будет работать только на датасетах без null-ов.
Сравни скорость. Я так понимаю ты и на все остальные оптимизации скажешь, что это все бессмысленная трата времени. Однако эффект на лицо. Разница не на проценты, а в 3-4 раза. И это при том, что Trantor заявлял, что скорость от бинарности не увеличится.
В общем-то он прав. Основной выигрышь за счет оптимизаций типа выноса typeof(int) из цикла.
... << RSDN@Home 1.0 beta 6a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Сериализация в дотнете (самопальный датасет)
Здравствуйте, VladD2, Вы писали:
VD>Типы типа дат в строках выглядят совсем погано.
Согласен, я об этом подумал позже, видь могут стоять на компах разные локализации...
VD>Но нужно эксперементировать. Нужно пожать это дело зипом и поглядеть результат. (как по скорости сжатия, так и по объему).
А где ксати ЗИП взять который под НЕТ ты использовал (не ActiveZIP)?
... << RSDN@Home 1.0 beta 6a >>
В жизни мало быть умным, надо еще быть не дураком.
Re[5]: Сериализация в дотнете (самопальный датасет)
Здравствуйте, VladD2, Вы писали:
VD>Это еще почему? У BinaryWriter есть перегнуженные методы для записи: byte (Int8), short(Int16) int(Int32), long(Int64) и их бесзнаковых аналогов. Так что все пучечком.
ОК.
VD>Ну, мы же не мусульмане.
T>>Это надо дергать когото из RSDN'щиков у кого доступ к сервису есть. VD>АВК.
АВК — дерг,дерг...
... << RSDN@Home 1.0 beta 6a >>
В жизни мало быть умным, надо еще быть не дураком.
Re[8]: Сериализация в дотнете (самопальный датасет)
Здравствуйте, VladD2, Вы писали:
VD>Так что сначала в стек закладывается токен (действительно констатна), а затем вызывается относительно навароченная функция которая по нему ищет объект типа Type.
А ведь и правда. Если я правильно понял исходник, то GetClassFromHandle.
Re[8]: Сериализация в дотнете (самопальный датасет)
Здравствуйте, VladD2, Вы писали:
T>>А где ксати ЗИП взять который под НЕТ ты использовал (не ActiveZIP)?
VD>Позже сделаю подборку. Пока что кидай мыло вышлю почтой. ~ 870 килобайт.