我目前正在对我的 Web 应用程序使用 db4o 存储进行一些研究。我很高兴 db4o 的工作如此简单。因此,当我读到 Code First 方法时,我有点喜欢,因为使用 EF4 Code First 的方式与使用 db4o 非常相似:创建您的域对象 (POCO),将它们扔给 db4o,然后再也不回头。
但是当我进行性能比较时,EF 4 的速度非常慢。我不知道为什么。
我使用以下实体:
public class Recipe
{
private List _RecipePreparations;
public int ID { get; set; }
public String Name { get; set; }
public String Description { get; set; }
public List Tags { get; set; }
public ICollection Preparations
{ get { return _RecipePreparations.AsReadOnly(); } }
public void AddPreparation(RecipePreparation preparation)
{
this._RecipePreparations.Add(preparation);
}
}
public class RecipePreparation
{
public String Name { get; set; }
public String Description { get; set; }
public int Rating { get; set; }
public List Steps { get; set; }
public List Tags { get; set; }
public int ID { get; set; }
}
为了测试性能,我新建了一个配方,并添加了 50.000 个配方准备。然后我将对象存储在 db4o 中,如下所示:
IObjectContainer db = Db4oEmbedded.OpenFile(Db4oEmbedded.NewConfiguration(), @"RecipeDB.db4o");
db.Store(recipe1);
db.Close();
这大约需要 13.000 (ms)
我使用 EF4 将这些东西存储在 SQL Server 2008(Express,本地)中,如下所示:
cookRecipes.Recipes.Add(recipe1);
cookRecipes.SaveChanges();
这需要 200.000 (ms)
现在db4o 15(!!!) 到底是如何比EF4/SQL 快的?我是否缺少 EF4 的秘密加速按钮?我什至认为 db4o 可以做得更快?由于我没有初始化数据库文件,我只是让它动态增长。