该MySqlCommand BeginExecuteReader缺少一个AsyncCallback参数使其几乎无用
-
22-07-2019 - |
题
我希望这里有人可能会帮助我。
在我工作的公司宁愿我使用MySQL而不是MSSQL。 所以,我下载了最新的驱动程序(6.1)和我端起了DB层。
但是我无法找到BeginExecuteReader函数,它接受一个回调作为参数。
这是有原因的?抑或是不同的使用MySQL的?
据我可以看到它,如果代码没有引发回调,我需要查询这使得它缓慢。利用每个连接一个阻塞线程也未尝我希望避免的。
任何想法如何解决呢? (除了改变这可能超出我的权力驾驶员)
[R
解决方案
MySQL的连接器的版本6.3.4实现异步方法,但它似乎只是调用一个委托异步所以这将是非阻塞调用线程,但它不会从线程池保存任何线程。 下面是关于这的错误报告。
和,就像你说的,它不会有一个回调参数。 下面是关于这的错误报告。
我相信 devart的数据提供商正确地实现异步方法,但它们不是免费的。
总之,异步调用数据库本身并不意味着更好的整体可扩展性。我建议你阅读文章 “的如果我的数据库调用是异步?”一个深入的分析。
其他提示
我不知道这个连接器而言,但我已经看到了MySQL的所有其他连接器只是等待服务器的execute()或查询()调用时返回的数据。当您尝试请求下一行,但它并没有从MySQL服务器还没到,你会得到使用“无缓冲”的版本,从执行(立即返回)或查询(),但块最接近的一次。
MySQL的线程支持对我来说似乎基本上在事后进行。
可以不,例如,通过C API,取消发行的查询;相反,查询功能简单的块。为了使多个并发查询,则每个查询需要一个线程!
尝试使用Postgres的。我没有用它(C API把我关 - 所有这些类型定义),但它肯定具有多线程查询适当的支持(例如异步调用等)
不隶属于 StackOverflow