객체를 전달할 때 성능 차이가 더 큽니까?

.net c# dapper micro-orm orm

문제

그래서 최근에 몇몇 프로젝트에서 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 
                     }

수동으로 값을 제공하는 것이 유익한 지 궁금하거나 아니면 그냥 객체를 전달하고 Dapper가 방법을 사용하도록 할 수 있는지 궁금합니다.

특히 목록이 성장하기 시작하면 :

옵션 1b

string sqlQuery = @"INSERT INTO [PTTicket]
                                         ([Id]
                                         ,[Name]
                                         ,[SMState]
                                         ,[CreatedByMember]
                                         ,[StartDate]
                                         ,[ClosedDate]
                                         ,[Remarks])
                                   VALUES
                                         (@Id
                                         ,@Name
                                         ,@SMState
                                         ,@CreatedByMember
                                         ,@StartDate
                                         ,@ClosedDate
                                         ,@Remarks)";
con.Execute(sqlQuery, ptTicket);

옵션 2b.

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!

그때 그것은 .LongDescription 하게 보낼 수있을 것입니다 .LongDescription .

저장 프로 시저를 사용하는 경우 그러한 검사가 불가능하므로 볼 수있는 모든 것을 전송합니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.