首页 / C# / c#-精简程序多个查询读取速度很慢
c#-精简程序多个查询读取速度很慢
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-精简程序多个查询读取速度很慢,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2709字,纯文字阅读大概需要4分钟。
内容图文
我看到了很多有关此的问题,以及Marc Gravell关于他为什么不想继续在dapper上使用多重网格的解释.
但是我只想了解一些东西
var grid = context.QueryMultiple(string.Join(" ; ", selectCommands));
return queries.Select(q => grid.Read<T>()).AsList();
在这种情况下,QueryMultiple大约需要3秒钟才能执行(这几乎是SQL上的执行时间),而具有2个查询的网格读取首先需要3秒钟,然后需要9秒钟.
每行大约有5万行,只有5列,其中2列为int,2列为double(在SQL上为float)和日期时间.
我试图关闭缓冲,但并没有帮助.
这是因为Dapper首先查询数据库只是为了执行查询.然后根据读取请求再次连接到数据库,并获取特定读取的所有数据?
仅创建几个异步任务并与单个查询一起运行会更好吗?
解决方法:
I saw many questions about this and Marc Gravell’s explanations of why he doesn’t want to continue playing with the multiple grid on dapper
最可能的原因是,尽管我们执行查询时会使用MARS-多个活动结果集产生多个结果,但仍然无法一次性访问所有结果集.通过使用DataReader的Ne??xtResult功能在内部执行,可以按顺序读取它们.对于应用程序,它仍然是1个调用,理想情况下,使用多个异步调用的同一事物将始终并行获取所有结果集(理想的系统/资源使用情况)
Regarding your query:
query.Select(q => grid.Read< T>()).AsList();
我假设您的所有结果集的类型均为T,而您要提取的最终结果的类型为List< IEnumerable< T>.
现在,您拥有的选项是使用Async-Await修改查询,如下所示:
var grid = await context.QueryMultipleAsync(string.Join(";",selectCommands));
return queries.Select(q => await grid.ReadAsync<T>()).AsList();
Would this help ?
通过使操作异步,在一定程度上,但好处是有限的,因为使用MARS读取仍然是顺序的.
现在,您查询的主要部分
In this case the QueryMultiple takes around 3 seconds to execute (which is the pretty much the execution time on the SQL) and the read of the grid which has 2 queries takes 3 seconds at first and then 9 seconds on the second.
令人惊讶的是,Read是唯一完成的操作,查询已执行.我们正在使用DataReader,它已经是一个连接器,与Dapper GridReader相同,后者是DataReader的包装器.如果仅读取所花的时间如此之多,以至于仅5万条记录也是如此,那么您可能想弄清楚其他影响性参数,例如Network IO速度,是否达到内存/ RAM限制,这是影响巨大的外部因素.
Is this because Dapper first Queries the database just to get the queries executed. Then connects to the database again upon request for the read and gets all the data for the specific read?
由于以下原因,始终是更好的策略:
>高度可扩展的方法
>数据库可以针对其设计一起执行多个查询
>没有顺序收集/读取结果
话虽如此,我仍然感到惊讶的是,仅仅读取5万条记录是如此之慢,这必须是外部因素.切换缓冲区设置仅对5万条记录没有太大影响,它们使用二进制序列化进行了很好的压缩,通常缓冲区优先是首选设置,因为其优化
编辑1
您必须尝试的第一件事是在相对高端的硬件,更高的RAM,更多的处理器,更好的网络IO上运行相同的测试用例,只是为了了解硬件的变化是否带来了改进,因为即使使用QueryMultiple,Dapper也已经得到了优化.和通过GridReader读取
内容总结
以上是互联网集市为您收集整理的c#-精简程序多个查询读取速度很慢全部内容,希望文章能够帮你解决c#-精简程序多个查询读取速度很慢所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。