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秒钟读取下数据库看看是否有要处理的数据(因为数据量比较大)所以采用多线程的方式进行处理的,还有什么更好的写法吗,多线程的新手一个,望大家指点
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秒钟读取下数据库看看是否有要处理的数据(因为数据量比较大)所以采用多线程的方式进行处理的,还有什么更好的写法吗,多线程的新手一个,望大家指点
解决方案 »
- 求从hmlt页面中提取多个网址的正则表达示
- 用xslt和xml生成excel报表时,大家的xslt都是怎么生成的?有没有什么好用点的工具?
- Socket服务器的用户发送接受缓冲区怎么做?
- C#采集器问题?????
- C#窗体与类之间的传递问题
- 急需解决的图片刷新问题,大家帮帮忙!(在线等,顶者有分)
- Asp.net网站服务端向Winform客户端发送消息 弹出窗口显示
- 如何实现 调用外部程序 并且让它在后台运行
- 招聘.NET高级软件工程师等技术类职位
- 请问各位仁兄!在C#中如何在注册表中添加、删除、修改主建和建值?
- ORACLE序列化ID,分层开发时插入操作如何处理的问题
- C#中写自定义控件component与control的区别?
之后加上一句GC.Colect()
threadTwo.Join();
这里可以吗,用Abort总是会抛异常,然后程序开一段时间就自动掉了
问题2:预期的效果——线程1读取数据库一条数据,进入业务逻辑处理,处理完毕之后,线程1才继续读下一条数据进行处理。线程1处理的同时,其他线程也按照这样的流程到数据库读数据进行处理,但是线程之间不得重复读取同一条数据。现在的效果——线程1读取数据后进入业务逻辑处理,业务逻辑处理还没有完毕,线程1又会去读取其他数据进行处理。如何才能让线程1完成的处理掉一条数据以后才去读下一条数据?
问题3:电脑有双核跟四核的,XP系统运行起来可以。服务器是s2003的系统,两颗四核CPU,为啥就运行不起来呢。核心越多,处理速度就越快么?