ThreadPool的一些疑问

wahf19841010 2012-04-15 12:13:24
数据库中有一张A表。如果有要处理的订单数据就会进入到A表,我需要每隔几秒就查下有要处理的订单吗。如果使用计时器每隔几秒搜索一次,有要处理的订单就for循环读取数据处理我感觉效率太低,所以就想使用ThreadPool来处理,因为之前没用过,我贴代码大家帮忙看下有哪儿些问题?还有就是如果是调用全局变量的话,线程池里的线程之间会出现混乱吗,就是线程1会读到线程2的变量值吗?

private void Form1_Load(object sender, EventArgs e)
{
ThreadPool.SetMaxThreads(200, 200);
ThreadPool.SetMinThreads(100, 100);
TimerCallback timerDelegate = new TimerCallback(test);
System.Threading.Timerime = new System.Threading.Timer(timerDelegate, this, 0, 5000);
}
public void test(object obj)
{
ThreadPool.QueueUserWorkItem(delegate(object obj1)
{
deal();
Thread.Sleep(1000);
});
}
public void deal()
{
//一次性读取表里top20的数据进行业务处理
}

...全文
194 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wahf19841010 2012-04-15
  • 打赏
  • 举报
回复
没有人吗
  • 打赏
  • 举报
回复
System.Threading.Timer本身就是在内部使用线程池,所以没有必要在回调中使用 ThreadPool.QueueUserWorkItem

我的看法是在回调中查询表A,如果结果的行数>0,则在循环加将每个任务使用ThreadPool.QueueUserWorkItem去操作。

小Ray 2012-04-15
  • 打赏
  • 举报
回复

用ThreadPool的时候,如果是用全局变量的话,注意在每个Thread操作变量的时候加锁,操作完毕之后解锁就行了。
机器人 2012-04-15
  • 打赏
  • 举报
回复
如果只是轮询的话,直接用 Timer 就可以了,timer本身就是在子线程里。

你起一个线程轮询还是多线程轮询,在增量少的时候,没什么区别。
wahf19841010 2012-04-15
  • 打赏
  • 举报
回复
哪儿位大侠指点下哈
1、Microsoft.Bussines.CommonProxy.dll 框架核心API库 包括:常用加密解密,缓存集群,IP地址库,Html Parse,金额转换,GoogleMap Api,Google PR,ImageMagick(图片处理),SharpZipLib压缩解压缩,中文分词核心库 2、WebSystem.Framework.dll 框架核心API库 包括:与Discuz相关的集成登陆,Evaluator计算表达式,Excel相关处理,Pdf处理,Msmq消息队列处理,ThreadPool(线程池,用于并发处理) 3、FrameWork.Extension.Toolkit.dll 针对DotNet基类扩展方法核心库 4、WebSystem.Framework.DAO.dll 数据访问层核心库:包括 DbHelperSQL,MySqlDbHelper,AccessDbHelper,实体层,数据库连接池 等 5、WebSystem.WebControls.dll 常用服务器控件核心库 主要提供后台开发使用 6、Business.Processing.dll 业务处理核心类库(定义前后台业务处理基类,支付,手机短信,序列号,用户等级,查询中心,报表处理中心等) 2.0新增加了 1、WebSystem.FrameWork.SearchEngine.dll 搜索引擎核心处理类库(提供并行中文分词、分布式并行采集器) 增加集成了中科院中文分词和盘古中文分词,并进行了并行改进,大大提高了分词性能 2、另外WebSystem.WebControls.dll 中新增加了100多个各类AJAX控件,另外集成并改写了全套extjs库,同时提供了一个WEB ERP的DEMO 3、另外在WebSystem.Framework.DAO.dll 数据访问层核心库,中增加了对Oracle、Sqlite、的处理功能,对所有的数据访问层的CRUD均增加了相关的 XML处理功能 也就是说所有的CRUD操作只要提供对应的实体和对应的XML数据即可 比如: /// /// 通过入Object的主键做为删除 主键为keys 的xml数据,删除后在重新插入xml中的数据 /// /// 实体对象 /// xml数据 /// 主键列表 /// public List GetDeleteAndInsertXmlSql(Object o, string xml, List keys) 4、增加集成了盘古中文分词 更多范例请参考 http://hi.baidu.com/earthsearch 注:使用范例时:请先引用所有的DLL类库 有任何疑问请与我本人联系 QQ 99923309 QQ群:

111,126

社区成员

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

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

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