什么是插入记录到数据库中最快的选项:使用其中的这些: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