什麼是插入記錄到數據庫中最快的選項:使用其中的這些:PetaPoco插頁 - 最快的方法?
Database.Insert(poco)
Database.Insert(tableName, pkName, poco)
Database.Save(poco)
Database.Save(tableName, pkName, poco)
哪一個我應該使用性能的原因?其中一個對我來說比另一個便利...
謝謝。
什麼是插入記錄到數據庫中最快的選項:使用其中的這些:PetaPoco插頁 - 最快的方法?
Database.Insert(poco)
Database.Insert(tableName, pkName, poco)
Database.Save(poco)
Database.Save(tableName, pkName, poco)
哪一個我應該使用性能的原因?其中一個對我來說比另一個便利...
謝謝。
哪一個應該用於性能的原因?
的Database.Save
方法檢索使用GetValue
主鍵字段的值,然後調用Database.Insert
或Database.Update
相應。
因此,當您的代碼確實需要將更改保存在可能是新的或預先存在的對象時,您應該只使用Database.Save
。此外,請注意,您的表必須有一個自動遞增的主鍵列,Database.Save
才能正常工作。
即使沒有輕微的性能差異,我更喜歡正確的語義 - 使用插入或通過保存更新。
一個並不比其他不太方便,我...
這是不是真的。
Database.Insert(poco)
將在您的poco類定義的自定義屬性中查找tableName
和pkName
的值。如果使用T4模板,這些值將自動保持與數據庫同步,並且只會在一個位置指定。另一方面,如果你在每個方法調用中傳遞它們,它們將在整個代碼庫中重複無數次。幹。如果您以後需要更改其中一個值,該怎麼辦?
現在,由於查找,Database.Insert(poco)
的性能會稍差。然而,PetaPoco緩存靜態字典中查找的結果,所以對性能的影響將在第一次查詢後非常小:
RWLock.EnterReadLock();
PocoData pd;
try
{
if (m_PocoDatas.TryGetValue(t, out pd))
return pd;
}
finally
{
RWLock.ExitReadLock();
}
在你列出的方法都4,對於插入,它看起來像PetaPoco總是調用數據庫類的以下方法:
public object Insert(string tableName, string primaryKeyName, bool autoIncrement, object poco)
而且Database.Insert(tableName, pkName, poco)
不工作的最低金額(它基本上是隻是一種傳遞方法),所以我會認爲它是最好的表現。
這裏是Insert(string, string, object)
代碼:
public object Insert(string tableName, string primaryKeyName, object poco)
{
return Insert(tableName, primaryKeyName, true, poco);
}
它很可能是輕微(和不易察覺)更快,只是直接調用Insert(string, string, bool, object)
超載。
是的,這種說法「一個不那麼方便我比其他。 ..「,我做了什麼補救措施是這樣的:http://blogs.msmvps.com/bmains/2011/12/31/helpful-petapoco-template-modifications/違反DRY,是的,但它對性能更好根據這個:http://www.toptensoftware.com/Articles/94/PetaPoco-More-Speed。我可能會嘗試讓定製更進一步... – 2012-01-01 03:13:07
@BrianMains:你真的需要擠出額外的一點速度嗎?我使用了定製的SubSonic模板一段時間(我們仍然在我們維護的應用中使用它們),這是一個拖累。無論如何,我想我已經在我的回答中清楚地闡明瞭權衡。你當然可以選擇更容易維護路線的更快的路線,但很少用法真的需要它。最大收益將來自配料操作,準備好的報表,適當的指數等。 – 2012-01-01 05:13:19
好的,謝謝您的參與。 – 2012-01-01 05:14:56