为什么多线程调用ExecuteNonQuery时会卡机?

longe329 2010-06-24 09:56:16
现在有一个项目,主线程执行所有操作,包括写入本地数据库;因为实际需要,有一个上传数据的线程!如下示:

主线程 Thread A :执行所有界面工作,包括数据分析,保存至(本地)数据库等操作,并将要上传的数据暂存至队列(queue)!

子线程 Thread B:子线程不断查询,一旦查询到队列有新的数据,马上执行上传功能,上传至中心服务器(非本地)!


PS:其中主线程与子线程调用的数据库及其连接字符串都不相同!

但是当我测试的时候,发现一旦网络断开之后,子线程在执行ExecuteNonQuery()命令时就会影响主线程的执行,使得软件有个假死的过程,请问出现这种问题是什么原因造成的啊,望高人解答,谢谢
...全文
154 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
longe329 2010-07-08
  • 打赏
  • 举报
回复
不好意思 最近比较忙 没来的及结贴
问题解决了 我当时用的是Mysql数据库 Mysql早期版本的动态库有问题 后来换了个动态库好了
stephen223 2010-06-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sp1234 的回复:]
这个不是很明显嘛!

你有几个脑袋?一个吧!当你用下巴写“回”字的时候,你的两个教尖可以左脚写“女”字右脚写“男子”吗?不行吧。

电脑也是这样。所谓多线程,仍然是在分时使用cpu的基础上的。那些简单地断言认为线程越多必然效率越高的说法,是不懂线程的。
[/Quote好
longe329 2010-06-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sp1234 的回复:]

这个不是很明显嘛!

你有几个脑袋?一个吧!当你用下巴写“回”字的时候,你的两个教尖可以左脚写“女”字右脚写“男子”吗?不行吧。

电脑也是这样。所谓多线程,仍然是在分时使用cpu的基础上的。那些简单地断言认为线程越多必然效率越高的说法,是不懂线程的。
[/Quote]

呵呵 谢谢您的提醒 不过我在上传数据的同时 也在使用FtpWebRequest类往中心服务器上传图片,可是上传图片这里就不会出现卡机的情况,而上传数据时候就会出现这种问题,所以很费解啊!
  • 打赏
  • 举报
回复
你的“子线程”必须快速结束,你说的它的“死掉”,实际上是在变本加厉地大量地消耗cpu时间。改什么线程池之类的,当然没有意义。
  • 打赏
  • 举报
回复
这个不是很明显嘛!

你有几个脑袋?一个吧!当你用下巴写“回”字的时候,你的两个教尖可以左脚写“女”字右脚写“男子”吗?不行吧。

电脑也是这样。所谓多线程,仍然是在分时使用cpu的基础上的。那些简单地断言认为线程越多必然效率越高的说法,是不懂线程的。
longe329 2010-06-24
  • 打赏
  • 举报
回复
怎么没有人回啊 急
longe329 2010-06-24
  • 打赏
  • 举报
回复
To:yuanhuiqiao
我创建了线程池 还是会卡机,并且我是将写本地数据库过程和写中心数据库的过程都改成了线程池 但是同样卡机,请问还有其他解决方法吗?

为什么执行子线程ExecuteNonQuery()方法时会引起主线程卡机呢,望高手解决啊????
longe329 2010-06-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yuanhuiqiao 的回复:]

可以执行查询前先判断一下连接状态,也可以搞连接池什么的
[/Quote]

请问怎么判断连接状态啊,我是新手,请指教,谢谢啦!
yuanhuiqiao 2010-06-24
  • 打赏
  • 举报
回复
可以执行查询前先判断一下连接状态,也可以搞连接池什么的
longe329 2010-06-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cja03 的回复:]

子线程 Thread B 在 网络断开之后 ,没必要继续运行了,应暂停它。
[/Quote]

但是主线程不知道什么时候网络通断啊,而且如果每次判断网络通断的话也是要耗很长时间的;
cja03 2010-06-24
  • 打赏
  • 举报
回复
子线程 Thread B 在 网络断开之后 ,没必要继续运行了,应暂停它。
jesse9898 2010-06-24
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 longe329 的回复:]

引用 10 楼 stephen223 的回复:

[Quote=引用 7 楼 sp1234 的回复:]
这个不是很明显嘛!

你有几个脑袋?一个吧!当你用下巴写“回”字的时候,你的两个教尖可以左脚写“女”字右脚写“男子”吗?不行吧。

电脑也是这样。所谓多线程,仍然是在分时使用cpu的基础上的。那些简单地断言认为线程越多必然效率越高的说法,是不懂线程的。
[/Quote好

……
[/Quote]
longe329 2010-06-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 stephen223 的回复:]

[Quote=引用 7 楼 sp1234 的回复:]
这个不是很明显嘛!

你有几个脑袋?一个吧!当你用下巴写“回”字的时候,你的两个教尖可以左脚写“女”字右脚写“男子”吗?不行吧。

电脑也是这样。所谓多线程,仍然是在分时使用cpu的基础上的。那些简单地断言认为线程越多必然效率越高的说法,是不懂线程的。
[/Quote好
[/Quote]

不知道楼上回复的“好”是想表达什么意思
我在9楼已经回复过了 当多线程的时候 同样访问中心FTP是没有问题的 但是访问数据库就是有问题

我想应该跟:“用下巴写“回”字的时候,你的两个教尖可以左脚写“女”。。。。。”没太大关系吧!

并且我看了CPU使用率 一直保持在5%以下

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧