PetaPoco Insert - 最快的方法?

Bri*_*ins 6 .net database insert petapoco

将记录插入数据库的最快选项是什么:使用以下哪些方法:

  • Database.Insert(poco)
  • Database.Insert(tableName, pkName, poco)
  • Database.Save(poco)
  • Database.Save(tableName, pkName, poco)

出于性能原因,我应该使用哪一个?一个对我来说并不比另一个方便......

谢谢.

que*_*rin 10

出于性能原因,我应该使用哪一个?

这些Database.Save方法使用GetValue,然后调用Database.InsertDatabase.Update相应地检索主键字段的值.

因此,您应该只Database.Save在代码确实需要保存对可能是新的或预先存在的对象的更改时使用.另请注意,您的表必须具有自动递增的主键列Database.Save才能工作.

即使没有轻微的性能差异,我也更喜欢正确的语义 - 使用Insert或Update over Save.

一个对我来说并不比另一个方便......

那不是真的.

Database.Insert(poco)将在poco类的定义中查找tableNamepkName定义属性的值.如果使用T4模板,这些值将自动与数据库保持同步,并且只能在一个位置指定.另一方面,如果在每个方法调用中传递它们,它们将在整个代码库中重复多次.干.如果您需要稍后更改其中一个值,该怎么办?

现在,Database.Insert(poco)由于该查找,性能稍差.但是,PetaPoco将查找结果缓存在静态字典中,因此在第一次查找后性能影响非常小:

RWLock.EnterReadLock();
PocoData pd;
try
{
    if (m_PocoDatas.TryGetValue(t, out pd))
        return pd;
}
finally
{
    RWLock.ExitReadLock();
}
Run Code Online (Sandbox Code Playgroud)