为什么WebClient在多线程中的操作会影响到UI线程(标题党)
2013-12-20 13:46
369 查看
最明显的问题就是UI线程会卡但不会卡死,但绝对没有操作UI线程
用DownloadString几乎不卡,用UploadData很容易卡
如果UploadData操作所使用的时间短的话那也不是多卡
但问题是为什么多线程的操作会影响到主线程呢?
好吧,标题党来了,下面的内容几乎跟WebClient无关了
几经周折,终于找到最根本的原因了
我新建了控制台程序添加了一个Form窗口,100线程UploadData一点都不卡,跑得飞快,这跟设想完全不一样,设想中应该是会卡才对的
然后又从原来的代码中一句一句删,代码都快删完了照样还是卡
偶然的机会,因为程序启动不能立即点击“开始”,要导入数据才能开始,后来为了方便测试就让开始可点击,然后再测试,奇迹当生了
不导入数据直接点击开始,尼玛不说一点都不卡,还是有那么一点的,但跟之前那真是差距太大了
这个时候还没怀疑到罪魁祸首,还以为是List<T>造成的,我导入数据用的List<T>,毕竟这玩意不是线程安全的,换成Queue照样不行
然后才怀疑到了尼玛是数据导入太多了`````50万条数据
我只导入几万条数据,一下子就不卡了```
用DownloadString几乎不卡,用UploadData很容易卡
如果UploadData操作所使用的时间短的话那也不是多卡
但问题是为什么多线程的操作会影响到主线程呢?
好吧,标题党来了,下面的内容几乎跟WebClient无关了
几经周折,终于找到最根本的原因了
我新建了控制台程序添加了一个Form窗口,100线程UploadData一点都不卡,跑得飞快,这跟设想完全不一样,设想中应该是会卡才对的
然后又从原来的代码中一句一句删,代码都快删完了照样还是卡
偶然的机会,因为程序启动不能立即点击“开始”,要导入数据才能开始,后来为了方便测试就让开始可点击,然后再测试,奇迹当生了
不导入数据直接点击开始,尼玛不说一点都不卡,还是有那么一点的,但跟之前那真是差距太大了
这个时候还没怀疑到罪魁祸首,还以为是List<T>造成的,我导入数据用的List<T>,毕竟这玩意不是线程安全的,换成Queue照样不行
然后才怀疑到了尼玛是数据导入太多了`````50万条数据
我只导入几万条数据,一下子就不卡了```
相关文章推荐
- iOS 为什么必须在主线程中操作UI
- iOS 为什么必须在主线程中操作UI
- UI多线程调用:线程间操作无效: 从不是创建控件"Form1"的线程访问它.
- !!c# 委托与多线程 -- 相比background来说,本方法针对当需要通过异步代理发起UI操作,而后线程中进行sleep操作的时使用
- 为什么Android的UI操作是线程不安全的
- 为什么必须在主线程中操作UI
- 为什么说android UI操作不是线程安全的 分类: Android 2014-09-23 21:08 1357人阅读 评论(0) 收藏 举报 目录(?)[+] 可能在非UI线程中刷新界面的时候,U
- Android中为什么主线程更新UI,子线程执行耗时操作?
- android 在子线程中操作UI 导致Fragment显示空白问题
- C# this.invoke()作用 多线程操作UI
- 多线程与UI操作
- 为什么都要在主线程中更新UI(iOS开发)
- 主线程不能执行耗时的操作,子线程不能更新Ui
- 为什么我们可以在非UI线程中更新UI
- 为什么我们可以在非UI线程中更新UI
- 讲Linux下面线程的操作、多线程的同步和互斥相关函数及操作的文章链接
- java--多线程--线程的操作
- 4种线程中操作UI
- 面试题:1,进程和线程的区别?什么时候用进程?什么时候用线程?为什么你的项目中用的是线程?为什么不用进程?如果只有进程,对你这个项目有没有影响?
- wpf中的多线程和窗口ui操作