|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
Переписал свой маппер на Emit'овские GetProperty и SetValue. Тест проводился на миллионе записей в DataTable (ID, Value), намапливаемых в IEnumerable<T>. Замер времени брался только на маппинг (не на заполнение таблицы, разумеется). Итоги: Reflection vs EmitЗамер 1Замер 2Замер 3Замер 4Замер 5Среднее20162017204320311973 2016.0 48664844487748424835 4852.8 Emit в 2.4 раза быстрее отработал за счёт кеширования свойств. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2011, 12:43 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
МСУ Emit в 2.4 раза быстрее отработал за счёт кеширования свойств.За счёт кодогенерации записи в свойства вместо PropertyInfo.SetValue. Ну и сама кодогенерация, разумеется, кешируется. В случае с чтением из датаридера, возможно, это и не даст существенного выигрыша, по сравнению с временем выполнения запроса. Но и хуже не будет. :-) А в задачах клонирования объектов, мэппингов между объектами, или DataTable и объектом и т. п. это даёт выигрыш в десятки раз. А в задаче сортировки по свойству класса, указываемому динамически (тычок на заголовок грида), без эмита просто не обойтись. В WPF к счастью для этого есть родные механизмы, а вот в WinForms таких возможностей нет. Конечно, в WinForms можно отказаться от типизированных списков в пользу DataTable, но это не наш метод. :-) ЗЫ: Если я не ошибаюсь, вызов делегата происходит медленнее вызова обычного метода. Можно ещё ускорить, заменив генерацию делегата генерацией виртуального метода. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2011, 13:40 |
|
Linq и SqlDataReader
|
|||
---|---|---|---|
#18+
Алексей КА в задачах клонирования объектов, мэппингов между объектами, или DataTable и объектом и т. п. это даёт выигрыш в десятки раз. Леня, харэ фантазировать. Привел же замеры, в 2.4 раза на миллионе запией :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2011, 17:46 |
|
|
start [/forum/topic.php?fid=17&gotonew=1&tid=1350607]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
12ms |
get first new msg: |
8ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 309ms |
total: | 470ms |
0 / 0 |