当仅仅传递对象时,任何细微的性能差异
本文关键字:性能 任何细 对象 | 更新日期: 2023-09-27 17:50:02
所以我最近在我的几个项目中使用了dapper,我很好奇以下示例之间是否有任何性能差异:
对于一个有许多属性的对象,明确地说明属性比让它自己找出属性有什么好处吗?
选项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
}
我只是好奇手动提供值是否有任何好处,或者如果我可以传递对象,让Dapper有它的方式。
特别是当列表开始增长时:
选项1 b
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 b。
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
});
在内联TSQL的情况下,不,它们应该是相同的。Dapper对命令做一些简短的检查,以决定要发送哪些属性,但这是非常基本的。如果你有这样的评论:
-- phew, it is a good job we didn't pass in @LongDescription, because
-- that could be 2GB in size!
那么这可能足以让dapper发送.LongDescription
。
如果您使用的是存储过程,那么这种检查是不可能的,所以它将发送它所能看到的一切。