Tôi hiện đang thực hiện một số nghiên cứu về việc sử dụng bộ nhớ db4o cho ứng dụng web của mình. Tôi khá hài lòng về cách thức hoạt động của db4o. Vì vậy, khi tôi đọc về phương pháp Code First, tôi thích là vì cách làm việc với EF4 Code First khá giống với làm việc với db4o: tạo các đối tượng miền của bạn (POCO), ném chúng vào db4o và không bao giờ nhìn lại.Tại sao mã EF4 Đầu tiên quá chậm khi lưu trữ các đối tượng?
Nhưng khi tôi thực hiện so sánh hiệu suất, EF 4 rất chậm. Và tôi không thể hiểu tại sao.
tôi sử dụng các đối tượng sau:
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 Tên {get; bộ; } chuỗi công khai Mô tả {get; bộ; } Xếp hạng công khai {get; bộ; } Danh sách công khai Các bước {get; bộ; } Thẻ danh sách công khai {get; bộ; } ID công khai {get; bộ; }}
Để kiểm tra việc thực hiện tôi mới lập một công thức, và thêm 50.000 RecipePrepations. Sau đó, tôi lưu trữ các đối tượng trong db4o như vậy:
IObjectContainer db = Db4oEmbedded.OpenFile(Db4oEmbedded.NewConfiguration(), @"RecipeDB.db4o");
db.Store(recipe1);
db.Close();
này mất khoảng 13.000 (ms)
tôi lưu trữ những thứ với EF4 trong SQL Server 2008 (Express, địa phương) như thế này:
cookRecipes.Recipes.Add(recipe1);
cookRecipes.SaveChanges();
Và điều đó mất 200.000 (mili giây)
Bây giờ làm thế nào trên trái đất là nhanh hơn DB4o 15 (!!!) nhanh hơn? Tôi có thiếu nút turbo bí mật cho EF4 không? Tôi thậm chí nghĩ rằng db4o có thể được thực hiện nhanh hơn? Vì tôi không khởi tạo tệp cơ sở dữ liệu, tôi chỉ cho phép nó phát triển động.
tôi đoán là các chi phí của nhiều đơn chèn-báo cáo được thực hiện là phần lớn nhất của sự khác biệt. Có cách nào để hướng dẫn EF4 kết hợp các câu lệnh chèn để giảm chi phí trên không? –
@Lasse: Có, có. EF thực hiện các đơn vị của mô hình công việc ra khỏi hộp - xem câu trả lời của tôi. –
Tôi đã thực hiện một số hồ sơ với Visual Studio. Và cookRecipes.Recipes.Add (recipe1) chiếm khoảng 65% tổng thời gian để lưu trữ, và SaveChanges xấp xỉ 35% (duh ...;)). – Saab