Какая разница в производительности при передаче объекта?
Поэтому в последнее время я использовал dapper для нескольких своих проектов, и мне было любопытно, есть ли разница в производительности между следующими образцами:
С объектом со многими свойствами 30+ есть ли какая-то польза от явного указания свойств, а не просто для того, чтобы он сам разбирался в этом?
Опция 1:
string sqlQuery = @"INSERT INTO [PTTicket]
([Id])
VALUES
(@Id)";
con.Execute(sqlQuery, ptTicket);
Вариант 2:
string sqlQuery = @"INSERT INTO [PTTicket]
([Id])
VALUES
(@Id)";
con.Execute(sqlQuery,
new
{
ptTicket.Id
}
Мне просто любопытно, есть ли какая-то польза от ручного предоставления значений или если я могу просто передать объект и позволить Дапперу получить его.
Тем более, что список начинает расти:
Вариант 1б
string sqlQuery = @"INSERT INTO [PTTicket]
([Id]
,[Name]
,[SMState]
,[CreatedByMember]
,[StartDate]
,[ClosedDate]
,[Remarks])
VALUES
(@Id
,@Name
,@SMState
,@CreatedByMember
,@StartDate
,@ClosedDate
,@Remarks)";
con.Execute(sqlQuery, ptTicket);
Вариант 2б.
string sqlQuery = @"INSERT INTO [PTTicket]
([Id]
,[Name]
,[SMState]
,[CreatedByMember]
,[StartDate]
,[ClosedDate]
,[Remarks])
VALUES
(@Id
,@Name
,@SMState
,@CreatedByMember
,@StartDate
,@ClosedDate
,@Remarks)";
con.Execute(sqlQuery,
new
{
ptTicket.Id,
ptTicket.Name,
ptTicket.SMState,
ptTicket.CreatedByMember,
ptTicket.StartDate,
ptTicket.ClosedDate,
ptTicket.Remarks
});
1 ответ
В случае встроенного TSQL, нет, они должны быть примерно одинаковыми. Даппер делает небольшую проверку команды, чтобы решить, какие свойства отправлять, но она довольно проста. Если у вас был комментарий, как:
-- phew, it is a good job we didn't pass in @LongDescription, because
-- that could be 2GB in size!
тогда этого может быть достаточно, чтобы сделать более щадящую отправку .LongDescription
,
Если вы используете хранимые процедуры, то такая проверка невозможна, поэтому она отправит все, что увидит.