在多线程学习中遇到的问题,球高手指点
时间:2011-12-14
来源:互联网
System.Threading.Timer time = null; private Thread threadOne; private Thread threadTwo; private event EventHandler OnNumberClear; public Form2() { InitializeComponent(); } private void Form2_Load(object sender, EventArgs e) { TimerCallback timerDelegate = new TimerCallback(Action); time = new System.Threading.Timer(timerDelegate, this, 0, 10000); } public void ThreadDemo_OnNumberClear(object sender, EventArgs e) { threadOne.Join(); threadTwo.Join(); GC.SuppressFinalize(this); } public void Action(object state) { threadOne = new Thread(new ThreadStart(Run), 1024 * 512); threadTwo = new Thread(new ThreadStart(Run), 1024 * 512); threadOne.IsBackground = true; threadTwo.IsBackground = true; threadOne.Name = "1"; threadTwo.Name = "2"; OnNumberClear += new EventHandler(ThreadDemo_OnNumberClear); threadOne.Start(); threadTwo.Start(); } private void Run() { Monitor.Enter(this); DataSet ds = null; //读取数据库中的一条记录,放入DataSet里 Monitor.Exit(this); if (ds.Tables[0].Rows.Count > 0) { //业务逻辑 } else { OnNumberClear(this, new EventArgs()); } Thread.Sleep(1000); }
在运行过程中出现的最大问题就是内存使用非常大,我一般就是开启6到10个线程,哪儿个地方没释放吗?
还有就是这种写法有什么问题吗,我要实现的效果就是每10秒钟读取下数据库看看是否有要处理的数据(因为数据量比较大)所以采用多线程的方式进行处理的,还有什么更好的写法吗,多线程的新手一个,望大家指点
作者: wahf19841010 发布时间: 2011-12-14
作者: wahf19841010 发布时间: 2011-12-14
之后加上一句GC.Colect()
作者: stonespace 发布时间: 2011-12-14
GC.SuppressFinalize(this);
会影响吗?
作者: mjp1234airen4385 发布时间: 2011-12-14
threadTwo.Join();
这里可以吗,用Abort总是会抛异常,然后程序开一段时间就自动掉了
作者: wahf19841010 发布时间: 2011-12-14
作者: Sandy945 发布时间: 2011-12-14
作者: wahf19841010 发布时间: 2011-12-14
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28