当前位置:编程学习 > C#/ASP.NET >>

timer与多线程

问题描述:
原本有一个定时器每隔一段时间去执行一个函数,用于读取数据库某张表数据,处理完删除掉(外部会一直传数据到这张表)
关键点:之前这个函数每次取10条来处理,速度比较慢,需要改为多线程来处理数据。有什么好的设计建议吗?

如果定时器在外部调用这个多线程实例,会比较麻烦,不可能每次都要start线程。只能在线程类设计timer? timer multiplethreads --------------------编程问答-------------------- 多大的数据量? --------------------编程问答-------------------- > 关键点:之前这个函数每次取10条来处理,速度比较慢,需要改为多线程来处理数据。

关键点是先找出慢在那里,为什么慢。不要上来就认为多线程管用。


--------------------编程问答-------------------- 使用线程池
ThreadPool.QueueUserWorkItem((obj) =>
            {
                  //your code here
            });
线程池可以降低线程的创建和释放的开销 --------------------编程问答--------------------
引用 2 楼 rtdb 的回复:
> 关键点:之前这个函数每次取10条来处理,速度比较慢,需要改为多线程来处理数据。

关键点是先找出慢在那里,为什么慢。不要上来就认为多线程管用。

我把问题说清楚点,例如我们客户会在线提交一些订单,然后通过EDI将订单发给供应商的ERP系统上,EDI可能用FTP或者是web service方式。例如现在从订单表里查数据,将订单通过对方ERP的web service发送,速度慢不在我方,因为对方采用HA(高可用性,备份好几份)架构,导致发送出去很慢才会得到对方连接的response。我们在查订单数据时间很短,可是发给对方会很慢,所以要改为多线程去发给对方,在查订单时候用LOCK来锁住,保证线程同步去获取到订单。 --------------------编程问答-------------------- 线程不线程的,跟你的“查询订单”没有关系。

你不就是“发送很慢”吗?那么你发送时使用异步方式就行了。不要稍微换点噱头,就把以前的什么代码都胡乱扔掉。 --------------------编程问答--------------------
引用 5 楼 sp1234 的回复:
线程不线程的,跟你的“查询订单”没有关系。

你不就是“发送很慢”吗?那么你发送时使用异步方式就行了。不要稍微换点噱头,就把以前的什么代码都胡乱扔掉。

他发送实在是太慢,比方发一笔需要1分钟,有几千笔,无法在24小时内及时发送出去。有异步试过了,效果也不好。还有这个是对方厂家IT工程师需要我们用多线程的方式,不是我们要搞噱头。 --------------------编程问答-------------------- 线程类设计timer肯定是没有意义的

可以先这样用简单的方法试一下:

主程序取10条数据上来,再启动10个处理线程,每个线程处理一个数据。 
--------------------编程问答-------------------- System.Timers.Timer就是在线程池上引发的,本身就是个线程了 --------------------编程问答--------------------
引用 8 楼 leafmao 的回复:
System.Timers.Timer就是在线程池上引发的,本身就是个线程了


是指它的Elapsed事件在线程池上引发
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,