В настоящее время я занимаюсь некоторыми исследованиями использования 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);
}
}
Открытый класс RecipePreparation { public String Name {get; задавать; } public String Описание {get; задавать; } public int Рейтинг {get; задавать; } открытые этапы списка {get; задавать; } public List Tags {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? Я пропустил секретную кнопку turbo для EF4? Я даже думаю, что db4o можно сделать быстрее? Поскольку я не инициализирую файл базы данных, я просто позволяю ему динамически расти.