当仅仅传递对象时,任何细微的性能差异

本文关键字:性能 任何细 对象 | 更新日期: 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

如果您使用的是存储过程,那么这种检查是不可能的,所以它将发送它所能看到的一切。