2014-03-13 22 views
1

所以,我一直在使用短小精悍的幾個我的項目還很少,我很好奇,如果有以下的樣品之間的性能差異:當傳遞對象時,任何短小的性能差異?

與許多屬性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 
        }); 

回答

1

在內聯TSQL的情況下,它們應該大致相同。 Dapper對命令做了一些簡短的檢查,以確定要發送哪些屬性,但它非常基本。如果你有一個像評論:

-- phew, it is a good job we didn't pass in @LongDescription, because 
-- that could be 2GB in size! 

那麼這可能是足以讓短小精悍發送.LongDescription

如果您使用的是存儲過程,則不可能進行此類檢查,因此它將發送所有可以看到的內容。

+0

迷人,我很欣賞洞察力。 – Wrightboy