当前位置: 首页 > 编程语言 > C#

EF6双上下文单上下文双等待分享

时间:2023-04-10 18:54:33 C#

EF6双上下文单上下文双等待哪种方法性能更好?注意:对于某些操作,我最多需要执行五个单独的查询。varfoo=awaitcontext.foos.ToListAsync();varbar=awaitcontext.bars.ToListAsync();和varfooTask=context1.foos.ToListAsync();varbarTask=context2.bars.ToListAsync();等待任务。WhenAll(fooTask,barTask);在没有等待的情况下使用相同的上下文会很棒,但是这个答案提到这是不可能的。如您所知,DbContext不是线程安全的,因此并行运行查询的唯一选择是为每个线程/任务创建一个新的DbContext。创建新DbContext的开销非常低。https://msdn.microsoft.com/en-us/library/cc853327.aspx由于对象将来自不同的DbContexts并进一步提高性能,我建议您也使用NoTracking()编辑:我做了一个简单的测试程序:classProgram{publicstaticvoidMain(string[]args){Console.WriteLine("正在预热数据库上下文...");使用(vardb=newTestDbContext()){Console.WriteLine(db.AuditLogItems.ToList().Count);}//第一次运行RunAsync();运行任务();//第二次运行RunAsync();运行任务();控制台.ReadKey();}privatestaticvoidRunAsync(){任务。Run(async()=>{varsw=Stopwatch.StartNew();Listlist1;Listlist2;using(vardb=newTestDbContext()){list1=awaitdb.AuditLogItems.AsNoTracking().ToListAsync();list2=awaitdb.AuditLogItems.AsNoTracking().ToListAsync();}sw.Stop();Console.WriteLine("在{1}毫秒内执行{0}。|{2}","Async",sw.ElapsedMilliseconds,list1.Count+""+list2.Count);}).Wait();}privatestaticvoidRunTasked(){Func>runQuery=()=>{using(vardb=newTestDbContext()){returndb.审计日志项ms.AsNoTracking().ToList();}};varsw=Stopwatch.StartNew();vartask1=Task.Run(runQuery);vartask2=Task.Run(runQuery);Task.WaitAll(task1,task2);sw.停止();Console.WriteLine("在{1}ms内执行了{0}。|{2}","Tasked",sw.ElapsedMilliseconds,task1.Result.Count+""+task2.Result.Count);}}输出是:预热数据库上下文...5908在293毫秒内执行异步。|59085908在56毫秒内执行任务。|59085908在194毫秒内执行异步。|,方案2更快。。。以上是C#学习教程:EF6双上下文和单上下文有两篇完整内容等待分享。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: