Re[5]: Сериализация в дотнете (самопальный датасет)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 16.04.03 18:03
Оценка:
Здравствуйте, VladD2, Вы писали:

AVK>>Имхо проще зип вставить в сериалайзер


VD>Да можно сделать одну функцию. На входе датасет, а не выходе зипованный стрим.


А еще лучче ченнел синк пакующий.
... << RSDN@Home 1.0 beta 6a (np: тихо) >>
AVK Blog
Re[6]: Сериализация в дотнете (самопальный датасет)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 16.04.03 19:01
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>1. typeof(int) = это функция которую тупой Шарповый компилятор не догадается вынести из цыкла.


Это оператор
... << RSDN@Home 1.0 beta 6a (np: тихо) >>
AVK Blog
Re[6]: Сериализация в дотнете (самопальный датасет)
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.04.03 19:32
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>А еще лучче ченнел синк пакующий.


Не не лучше. От тормозов это не избавит. Я тебе уже кажется наглядно продемонстрировал, что основные тормоза от форматера.

Так фоматер просто ничего не будет делать (все пойдет мимо него). А с черелом будет полная задница. Весь геморой с сериализацией датасета + все пойдет в текстовм виде. А так все пойдет через DIME.

Есть правда вариант... Форматеры поддерживают такую фичу как System.Runtime.Remoting.Messaging.RemotingSurrogateSelector.

Я так понимаю, возможно с его помощью можно будет делать "правильную" сериализацию автоматом.
... << RSDN@Home 1.0 beta 6a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Сериализация в дотнете (самопальный датасет)
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.04.03 19:36
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Чего? Сборка мусора синхронна и останавливает все потоки.


Гы-гы.

GC.Collect() — это не сборка мусора, а только ее запуст. Как я понимаю сборка производится из потока с меньшим приоритетом и она просто будет спать если ее не подождать.

Если хочешь дождаться окончани (а видимо, и начала) сборки нужно вызывать:

  GC.Collect();
  GC.WaitForPendingFinalizers();
... << RSDN@Home 1.0 beta 6a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Сериализация в дотнете (самопальный датасет)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 16.04.03 19:39
Оценка:
Здравствуйте, VladD2, Вы писали:

AVK>>А еще лучче ченнел синк пакующий.


VD>Не не лучше. От тормозов это не избавит. Я тебе уже кажется наглядно продемонстрировал, что основные тормоза от форматера.


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

VD>Так фоматер просто ничего не будет делать (все пойдет мимо него). А с черелом будет полная задница. Весь геморой с сериализацией датасета + все пойдет в текстовм виде. А так все пойдет через DIME.


Форматтер это тоже синк в канале.

VD>Есть правда вариант... Форматеры поддерживают такую фичу как System.Runtime.Remoting.Messaging.RemotingSurrogateSelector.


VD>Я так понимаю, возможно с его помощью можно будет делать "правильную" сериализацию автоматом.


Можно. Этой фишкой пользуются, когда подменяют MBR на ObjRef
... << RSDN@Home 1.0 beta 6a (np: тихо) >>
AVK Blog
Re[6]: Сериализация в дотнете (самопальный датасет)
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.04.03 19:46
Оценка:
Здравствуйте, mihailik, Вы писали:

M>Да, правильно!

M>Беру свои слова обратно, types[i] стоит построить. MyTypes.Int32 всё-таки заменить на typeof(int).

typeof(int) возвращает объект. Причем кажды раз! Сравнение объектных ссылок само по себе менее эффективно чем интов (из-за того что это приводит к виртуальным вызовам), так к тому же еще typeof() — это вызов серьезной функции.

На С++ такое влет прокатило бы (из-за оптимизации и более низкоуровневой технологии сравнения ссылок). А на Шарпе точно нужно делать отдельный массив.

В общем попробуй и замерь.
... << RSDN@Home 1.0 beta 6a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Сериализация в дотнете (самопальный датасет)
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.04.03 19:46
Оценка: 3 (1)
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, VladD2, Вы писали:


VD>>1. typeof(int) = это функция которую тупой Шарповый компилятор не догадается вынести из цыкла.


AVK>Это оператор


Хрен. Глянь анакриной/илдасмом. Да и просто замерь скорость. Я тут как-то из твоего лихого примера (загрузки сборок, если не ошибаюсь) вынес typeof(...) за пределы цикла и получил серьезный выигрыш.

Вот это:
Type t = typeof(int);


Навно вот этому:
  .locals init (class [mscorlib]System.Type V_0)
  IL_0000:  ldtoken    [mscorlib]System.Int32
  IL_0005:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
  IL_000a:  stloc.0


Так что не делайте глупостей. Если это можно в критических местах не лепите typeof()
... << RSDN@Home 1.0 beta 6a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Сериализация в дотнете (самопальный датасет)
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.04.03 19:53
Оценка:
Здравствуйте, mihailik, Вы писали:

M>typeof(int) — не функция. Это ссылка на метаданные, просто token.


Гы-гы. См. http://www.rsdn.ru/forum/Message.aspx?mid=244339&amp;only=1
Автор: VladD2
Дата: 16.04.03


M>Эффект — тот же, что и у константы.


Ню-ню. Создай тестовое приложение и попробуй.

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]: Сериализация в дотнете (самопальный датасет)
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.04.03 19:54
Оценка:
Здравствуйте, desperado_gmbh, Вы писали:

VD>>1. typeof(int) = это функция которую тупой Шарповый компилятор не догадается вынести из цыкла.


DG>Это не функция, а загрузка константы через ldtoken.


Я уже тут малость задалбался отвечать. См. http://www.rsdn.ru/forum/Message.aspx?mid=244344&amp;only=1
Автор: VladD2
Дата: 16.04.03
и http://www.rsdn.ru/forum/Message.aspx?mid=244339&amp;only=1
Автор: VladD2
Дата: 16.04.03
... << RSDN@Home 1.0 beta 6a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Сериализация в дотнете (самопальный датасет)
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.04.03 20:06
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Я ж не говорю что это нужно взамен сериалайзера, я предлагаю это как способ подключения паковщика.


А. Ну, это разумно. Вот только может оказаться проблематично передавать бинарные данные по http. Я ведь говорил о передачи в виде DIME-атача. Хотя если знать формат DIME, можно наверно все данные по нему качать. Такой легкий способ борьбы с фаерволами. А в теле вызова передавать строчку "Фаерволы идут лесом (с) IT"

AVK>Форматтер это тоже синк в канале.


Тогда нужно вести речь о самопальном форматере. Но это уже не так просто.

AVK>Можно. Этой фишкой пользуются, когда подменяют MBR на ObjRef


Ладно. Сделать рукопашнену для датасета можно за час-другой уже сейчас. А с RemotingSurrogateSelector еще капать и капать.
... << RSDN@Home 1.0 beta 6a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Сериализация в дотнете (самопальный датасет)
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.04.03 02:45
Оценка:
Здравствуйте, Trantor, Вы писали:

У тебя в тесте была ошибка. Ты писал данные Soap-фрматера в стрим Binary-форматера. Что увеличивало размер последнего.

Видимо из-за этого и менялись результаты при перестановках. Я переписал твой сериализатор сделав его полностью бирантым и оптимизировав те места которые мне показались наиболее требовательными к времени. Так же сделал подсчет загрузки. Результаты оказались настлько забавными что решил создать отдельную тему.

Попутно обнаружил серезный недостаток. Дело в том, что ты не расчитываешь на то, что ячейки могут содержать DbNull. Т.е. этот вариант будет работать только на датасетах без null-ов.

Вот мой вариант: http://www.rsdn.ru/forum/?mid=244451
Автор: VladD2
Дата: 17.04.03
... << RSDN@Home 1.0 beta 6a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Сериализация в дотнете (самопальный датасет)
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.04.03 02:45
Оценка:
Здравствуйте, AndrewVK, Вы писали:

VD>>1. typeof(int) = это функция которую тупой Шарповый компилятор не догадается вынести из цыкла.


AVK>Это оператор


Глянь переписаный вариант.

http://www.rsdn.ru/forum/Message.aspx?mid=244451&amp;only=1
Автор: VladD2
Дата: 17.04.03


Сравни скорость. Я так понимаю ты и на все остальные оптимизации скажешь, что это все бессмысленная трата времени. Однако эффект на лицо. Разница не на проценты, а в 3-4 раза. И это при том, что Trantor заявлял, что скорость от бинарности не увеличится.

В общем-то он прав. Основной выигрышь за счет оптимизаций типа выноса typeof(int) из цикла.
... << RSDN@Home 1.0 beta 6a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Сериализация в дотнете (самопальный датасет)
От: Trantor Россия  
Дата: 17.04.03 05:10
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Типы типа дат в строках выглядят совсем погано.


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

VD>Но нужно эксперементировать. Нужно пожать это дело зипом и поглядеть результат. (как по скорости сжатия, так и по объему).


А где ксати ЗИП взять который под НЕТ ты использовал (не ActiveZIP)?
... << RSDN@Home 1.0 beta 6a >>
В жизни мало быть умным, надо еще быть не дураком.
Re[5]: Сериализация в дотнете (самопальный датасет)
От: Trantor Россия  
Дата: 17.04.03 05:10
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Это еще почему? У BinaryWriter есть перегнуженные методы для записи: byte (Int8), short(Int16) int(Int32), long(Int64) и их бесзнаковых аналогов. Так что все пучечком.


ОК.

VD>Ну, мы же не мусульмане.




T>>Это надо дергать когото из RSDN'щиков у кого доступ к сервису есть.

VD>АВК.

АВК — дерг,дерг...
... << RSDN@Home 1.0 beta 6a >>
В жизни мало быть умным, надо еще быть не дураком.
Re[8]: Сериализация в дотнете (самопальный датасет)
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 17.04.03 09:01
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Так что сначала в стек закладывается токен (действительно констатна), а затем вызывается относительно навароченная функция которая по нему ищет объект типа Type.


А ведь и правда. Если я правильно понял исходник, то GetClassFromHandle.
Re[8]: Сериализация в дотнете (самопальный датасет)
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.04.03 20:54
Оценка:
Здравствуйте, Trantor, Вы писали:

T>А где ксати ЗИП взять который под НЕТ ты использовал (не ActiveZIP)?


Позже сделаю подборку. Пока что кидай мыло вышлю почтой. ~ 870 килобайт.
... << RSDN@Home 1.0 beta 6a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Сериализация в дотнете (самопальный датасет)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.04.03 05:55
Оценка:
Здравствуйте, VladD2, Вы писали:

T>>А где ксати ЗИП взять который под НЕТ ты использовал (не ActiveZIP)?


VD>Позже сделаю подборку. Пока что кидай мыло вышлю почтой. ~ 870 килобайт.


Мама миа, а чего такой огромный?
... << RSDN@Home 1.0 beta 6a >>
AVK Blog
Re[8]: Сериализация в дотнете (самопальный датасет)
От: mihailik Украина  
Дата: 18.04.03 14:39
Оценка:
VD>В общем-то он прав. Основной выигрышь за счет оптимизаций типа выноса typeof(int) из цикла.

Я проверил, написал небольшой цикл с typeof(int) и с static readonly Int32Type. Вопреки всем разумным объяснениям typeof(int) действительно медленнее!

На 2 млн циклах показатели такие:
Int32Type   0.220 с
typeof(int) 1.232 с


Это просто антинаучный факт!

На всякий случай сделал сравнение с проверкой "is int" для самого объекта. То же самое, что и typeof(int), та же скорость.

Влад, спасибо, научил.
... << RSDN@Home 1.0 beta 6a >>
Re[10]: Сериализация в дотнете (самопальный датасет)
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.04.03 14:42
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Мама миа, а чего такой огромный?


То на что дал ссылку ты еще больше (вроде).
... << RSDN@Home 1.0 beta 6a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Сериализация в дотнете (самопальный датасет)
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.04.03 14:42
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Мама миа, а чего такой огромный?


Да. ~ 870 килобайт — это исходники. Получаемая длл 130 кил.
... << RSDN@Home 1.0 beta 6a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.