В настоящее время я изучаю использование db4o хранилища для моего веб-приложения.Я очень рад, как легко работает db4o.Поэтому, когда я читаю о подходе Code First, который мне нравится, мне нравится то, что способ работы с EF4 Code First очень похож на работу с db4o: создайте свои доменные объекты (POCO), бросьте их в db4o и никогда не оглядывайтесь назад.
Но когда я сравнивал производительность, EF 4 работал ужасно медленно.И я не мог понять, почему.
Я использую следующие объекты:
</p>
<p>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(); } }</p>
<pre><code> public void AddPreparation(RecipePreparation preparation)
{
this._RecipePreparations.Add(preparation);
}
}
открытый класс RecipePreperation {public String Name {get;задавать;} public String Описание {get;задавать;} public int Rating {get;задавать;} public List Steps {get;задавать;} общедоступные теги списка {get;задавать;} public int ID {get;задавать;}}
Чтобы проверить производительность, я создаю новый рецепт и добавляю 50.000 RecipePrepations.Затем я сохранил объект в db4o следующим образом:
IObjectContainer db = Db4oEmbedded.OpenFile(Db4oEmbedded.NewConfiguration(), @"RecipeDB.db4o");
db.Store(recipe1);
db.Close();
Это занимает около 13 000 (мс)
Я храню вещи с EF4 в SQL Server 2008 (Express, локально) следующим образом:
cookRecipes.Recipes.Add(recipe1);
cookRecipes.SaveChanges();
И это занимает 200.000 (мс)
Как же db4o в 15 (!!!) раз быстрее, чем EF4 / SQL?Я скучаю по секретной кнопке турбо для EF4?Я даже думаю, что db4o можно было сделать быстрее?Поскольку я не инициализирую файл базы данных, я просто позволю ему динамически расти.