Почему Dapper быстрее?
От: SpLove Россия  
Дата: 14.04.11 09:06
Оценка:
Как известно, stackoverflow выложил свой маппер здесь вместе с результатами. BLToolkit хоть и держит марку всё равно немного отстаёт. Вопрос где и почему?
P.S.: Ещё в коде тестов, какое-то непонятное сообщение об ошибке рядом с использованием BLToolkit.
Re: Почему Dapper быстрее?
От: ili Россия  
Дата: 14.04.11 10:29
Оценка:
Здравствуйте, SpLove, Вы писали:

SL>Как известно, stackoverflow выложил свой маппер здесь вместе с результатами. BLToolkit хоть и держит марку всё равно немного отстаёт. Вопрос где и почему?

SL>P.S.: Ещё в коде тестов, какое-то непонятное сообщение об ошибке рядом с использованием BLToolkit.

поройтесь поиском по форуму... подобных тем был вагон уже
такая разница между рукописным кодом и БЛТ наталкивает на мысль, что это результаты "холодного" прогона.
Re: Почему Dapper быстрее?
От: IT Россия linq2db.com
Дата: 14.04.11 11:44
Оценка:
Здравствуйте, SpLove, Вы писали:

SL>Как известно, stackoverflow выложил свой маппер здесь вместе с результатами. BLToolkit хоть и держит марку всё равно немного отстаёт. Вопрос где и почему?


Причин несколько.

— Они тестируют выборку единичной записи. Достаточно сделать тесты, выбирающие 10/100 записей и картина существенно меняется.
— Их маппер прост, если не сказать примитивен. Т.е. они умеют мапить только одноимённые поля из рекордсета в объект. Никаких настроек не предусмотрено.
— Мапперу BLToolkit уже лет семь. Видимо пора подумать о новых оптимизациях или даже о новом дизайне библиотеки.
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: Почему Dapper быстрее?
От: ili Россия  
Дата: 14.04.11 14:49
Оценка:
Здравствуйте, IT, Вы писали:

а для линка свои мапперы не генерятся?

кстати, давно мучает вопрос, почему в линке мапинг делается не по [MapField] а как-то по хитрому, алиасы генерятся их объектной модели?
Re[3]: Почему Dapper быстрее?
От: IT Россия linq2db.com
Дата: 14.04.11 15:25
Оценка:
Здравствуйте, ili, Вы писали:

ili>а для линка свои мапперы не генерятся?


Генеряться. Но при таких тестах основное время уходит на конвертацию Linq.Expressions, так что выигрышь теряется.

ili>кстати, давно мучает вопрос, почему в линке мапинг делается не по [MapField] а как-то по хитрому, алиасы генерятся их объектной модели?


По идее такого быть не должно. Можно пример?
Если нам не помогут, то мы тоже никого не пощадим.
Re[4]: Почему Dapper быстрее?
От: ili Россия  
Дата: 14.04.11 16:41
Оценка:
Здравствуйте, IT, Вы писали:

IT>По идее такого быть не должно. Можно пример?



public class Parent
{
    public int Id;
}


[MapField("ParentId", "Parent.Id")]
public class Child
{
    public int Id;
    public Parent Parent;
}

db.GetTable<Child>()
.Where(_ => _.Id = 10)
.ToList();


SQL будет примерно такой (если я по воспоминаниям ничего не путаю):

SELECT 
    [t1].[Id] AS [Id1],
    [t1].[ParentId] AS [Parent_Id]
FROM [Child] [t1]
WHERE [t1].[ParentId] = @par


вот всякие появления единичек, и [Parent_Id] меня как-то удивляют... нипонятно зачем такие сложности от того и спрашиваю
при этом единичка получаются как-то не всегда...
Re[5]: Почему Dapper быстрее?
От: IT Россия linq2db.com
Дата: 14.04.11 17:11
Оценка:
Здравствуйте, ili, Вы писали:

ili>вот всякие появления единичек, и [Parent_Id] меня как-то удивляют... нипонятно зачем такие сложности от того и спрашиваю


В Parent_Id '.' из Parent.Id всего лишь заменена на '_'.

ili>при этом единичка получаются как-то не всегда...


Единичка может появляться в конструкциях LEFT JOIN, если нет другого способа определить, что правая часть NULL. Проверяя это поле Linq провайдер не создаёт объект, если вместо единички возврашается NULL.
Если нам не помогут, то мы тоже никого не пощадим.
Re[6]: Почему Dapper быстрее?
От: ili Россия  
Дата: 15.04.11 04:25
Оценка:
Здравствуйте, IT, Вы писали:

IT>В Parent_Id '.' из Parent.Id всего лишь заменена на '_'.


ну вот мне и интересно, почему не использовать ParentId если маппинг задан явно.
Re: Почему Dapper быстрее?
От: andrex Украина  
Дата: 27.04.11 11:21
Оценка:
Здравствуйте, SpLove, Вы писали:

SL>Как известно, stackoverflow выложил свой маппер здесь вместе с результатами. BLToolkit хоть и держит марку всё равно немного отстаёт. Вопрос где и почему?


Я когда добавлял тест для BLToolkit так и думал тулкит проиграет этому специализированному мапперу, но в то же время результаты очень неплохи особенно если сравнить возможности этого простого маппера и BLToolkit.
Еще хотел бы обратить внимание на удобство подключения. Чтобы подключить тулкит мне пришлось написать 2 строчки кода, а теперь сравни с подключением хваленого NHibernate для подключения которого пришлось написать конфиг, описать маппинг в XML и создать класс для конфигурирования (про то что он позорно сольет в скорости и так было ясно)


SL>P.S.: Ещё в коде тестов, какое-то непонятное сообщение об ошибке рядом с использованием BLToolkit.


Посмотрел, это не относится к BLToolkit. Это добавили еще какой то маппер, а он выпал с ошибками их и закомментировали.
Я бы изменил мир — но Бог не даёт исходников...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.