我有一个SQLite数据库,其中包含一个名为" Main"的表。该表的每条记录只包含两个字段:ID(整数,主键)和名称(字符串)。数据库中有100条记录。
使用Entity Framework Power Tools我已经从现有数据库创建了Code First模型。该模型相当简单:
// MainMap.cs
public class MainMap : EntityTypeConfiguration<Main>
{
public MainMap()
{
// Primary Key
this.HasKey(t => t.ID);
// Properties
this.Property(t => t.name)
.IsRequired()
.HasMaxLength(50);
// Table & Column Mappings
this.ToTable("Main");
this.Property(t => t.ID).HasColumnName("ID");
this.Property(t => t.name).HasColumnName("name");
}
}
// Main.cs
public partial class Main
{
public long ID { get; set; }
public string name { get; set; }
}
// mainContext.cs
public partial class mainContext : DbContext
{
static mainContext()
{
Database.SetInitializer<mainContext>(null);
}
public mainContext()
: base("Name=mainContext")
{
}
public DbSet<Main> Mains { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new MainMap());
}
}
现在我试图从数据库中获取记录:
mainContext context = new mainContext();
context.Mains.Load();
现在,我可以将context.Mains.Local
用于不同目的(实际上,我将其绑定到ListView
&#39; s ItemsSource
)。
问题是context.Main.Load()
行执行了大约2.7秒。我认为,从简单的数据库中检索大约100条记录的时间太长了。虽然,我是数据库的新手,所以,也许我不对,2.7秒是相当合适的一段时间。我的CPU是Intel i3-3220(2x3.30 GHz),Entity Framework的版本是6.0。
也许,我的Code First模型很差,或者EF没有提供高性能,或者可能没有必要调用Load()
方法来获取记录(但如果我不这样做的话)叫它,context.Mains.Local
是空的。)
那么,如何提高从数据库中获取记录的性能呢?
任何帮助和提示都将不胜感激。
答案 0 :(得分:0)
我用SQLite和SQL Server运行了一些测试。在我的笔记本电脑(corei7 2630QM 2.00GHZ&amp; win7 64bit)上,两者的加载时间约为1.5秒。 然后我试着用类似
之类的东西加热context.Database.Exists();
两者的时间减少到约700毫秒。
我在项目属性的构建选项卡中使用了“Prefer 32-bit”和“Optimize code”选项。这些选择产生了最好的结果。
尝试这些并查看加载时间是否发生变化。