![]() |
朝气蓬勃的豆腐 · 韩漫《万能履历表》和最近大火的超级公务员类似 ...· 7 月前 · |
![]() |
礼貌的消防车 · 【安全篇】为爱护航·安全抵达-----新度甜 ...· 7 月前 · |
![]() |
文武双全的跑步鞋 · 镇魂街天生为王曹焱兵怎么样 ...· 1 年前 · |
![]() |
体贴的骆驼 · 花生漫画:如何将一副人生烂牌打得风生水起?_ ...· 1 年前 · |
![]() |
骑白马的大熊猫 · 叫板李嘉诚的潮汕大佬,只是豪宅的过客_手机新浪网· 1 年前 · |
正如标题所示,我在使用实体框架对Server数据库进行第一个查询时遇到了问题。我曾试图寻找答案,但似乎没有人真正有办法解决这个问题。
这些测试是在Visual 2012中使用实体框架6完成的,我还使用T4视图模板预编译视图。数据库位于Server 2008上。我们有大约400个POCOs (400个映射文件),数据库表中只有100行数据。
下面的捕获是我的测试代码和结果。
static void Main(string[] args){
Stopwatch st=new Stopwatch();
st.Start();
new TestDbContext().Set<Table1>.FirstOrDefault();
st.stop();
Console.WriteLine("First Time "+st.ElapsedMilliseconds+ " milliseconds");
st.Reset();
st.Start();
new TestDbContext().Set<Table1>.FirstOrDefault();
st.stop();
Console.WriteLine("Second Time "+st.ElapsedMilliseconds+ " milliseconds");
}
测试结果
First Time 15480 milliseconds
Second Time 10 milliseconds
在第一个查询中,EF编译模型。对于这么大的模型来说,这可能需要一些严肃的时间。
摘要:
我还将确保在执行基准测试时,以发布模式编译应用程序。
另一个解决方案是考虑拆分DBContext。400个实体非常多,与较小的块一起工作应该更好。我还没有试过,但我认为可以一个接一个地构建模型,这意味着没有单一的负载需要15s。参见朱莉·勒曼 https://msdn.microsoft.com/en-us/magazine/jj883952.aspx 撰写的这篇文章
我认为这不是一个很好的解决办法。Ado.net看起来性能要好得多。不过,这是我的意见。
或者看看他们。
https://msdn.microsoft.com/tr-tr/data/dn582034
https://msdn.microsoft.com/en-us/library/cc853327(v=vs.100).aspx
这是我的工作:
using (MyEntities db = new MyEntities())
db.Configuration.AutoDetectChangesEnabled = false; // <----- trick
db.Configuration.LazyLoadingEnabled = false; // <----- trick
DateTime Created = DateTime.Now;
var obj = from tbl in db.MyTable
where DateTime.Compare(tbl.Created, Created) == 0
select tbl;
dataGrid1.ItemsSource = obj.ToList();
dataGrid.Items.Refresh();
}
你可以试试这样的方法:(这对我有用)
protected void Application_Start()
Start(() =>
using (EF.DMEntities context = new EF.DMEntities())
context.DMUsers.FirstOrDefault();
private void Start(Action a)
a.BeginInvoke(null, null);
}
使用EF,您可以在调用
services.AddDbContext
后早期欺骗和加载模型(您可能也可以使用EF6进行类似的操作,但我还没有对其进行测试)。
services.AddDbContext<MyDbContext>(options => ...);
var options = services.BuildServiceProvider()
.GetRequiredService<DbContextOptions<MyDbContext>>();
Task.Run(() =>
![]() |
骑白马的大熊猫 · 叫板李嘉诚的潮汕大佬,只是豪宅的过客_手机新浪网 1 年前 |