我现在要给1W个用户发邮件,所以我就用线程的方式
如 for (Int32 i = 0; i <= 4000; i++)
{
//这里是启动多线程
System.Threading.Thread NewTh = new System.Threading.Thread(new System.Threading.ThreadStart(SendMail));
NewTh.SetApartmentState(System.Threading.ApartmentState.STA);
NewTh.Start();
while (NewTh.ThreadState == System.Threading.ThreadState.Running)
{
}
System.Threading.Thread.Sleep(500);
}但当发送了有3-4百个的时候IIS就挂了,
提示WebXXX.Service出错
然后网站就打不开了,我想是IIS挂掉了
大概是太多线程,无法处理出错那怎么来控件线程个个数呢如 for (Int32 i = 0; i <= 4000; i++)
{
if(线程<200)
{
//这里是启动多线程
System.Threading.Thread NewTh = new System.Threading.Thread(new System.Threading.ThreadStart(SendMail));
NewTh.SetApartmentState(System.Threading.ApartmentState.STA);
NewTh.Start();
while (NewTh.ThreadState == System.Threading.ThreadState.Running)
{
}
System.Threading.Thread.Sleep(500);
}
}那这里的
if(线程<200)
怎么写谢谢
如 for (Int32 i = 0; i <= 4000; i++)
{
//这里是启动多线程
System.Threading.Thread NewTh = new System.Threading.Thread(new System.Threading.ThreadStart(SendMail));
NewTh.SetApartmentState(System.Threading.ApartmentState.STA);
NewTh.Start();
while (NewTh.ThreadState == System.Threading.ThreadState.Running)
{
}
System.Threading.Thread.Sleep(500);
}但当发送了有3-4百个的时候IIS就挂了,
提示WebXXX.Service出错
然后网站就打不开了,我想是IIS挂掉了
大概是太多线程,无法处理出错那怎么来控件线程个个数呢如 for (Int32 i = 0; i <= 4000; i++)
{
if(线程<200)
{
//这里是启动多线程
System.Threading.Thread NewTh = new System.Threading.Thread(new System.Threading.ThreadStart(SendMail));
NewTh.SetApartmentState(System.Threading.ApartmentState.STA);
NewTh.Start();
while (NewTh.ThreadState == System.Threading.ThreadState.Running)
{
}
System.Threading.Thread.Sleep(500);
}
}那这里的
if(线程<200)
怎么写谢谢
是用WinForm还是20线程*500这不重要
我想了解
ASP.NET建了多少线程后IIS就挂了,
还有我如何判断我建立了多少个线程谢谢
我以前的处理办法是使用一个QUEUE的队列,然后将邮件数据压到这个队列里面去,加一个TIMER定时检查这个队列的数量,如果说>0的话就将QUEUE中的邮件交由线程池来处理。
这里需要控制这个队列的访问,确保同时只有一个线程在修改这个队列数据
while (NewTh.ThreadState == System.Threading.ThreadState.Running)
{
}
这句话就可以直接把你的CPU推到100%,因为NewTh只要还在发邮件,这里就相当于while (true),你有个while (true)在跑,人家NewTh还怎么发邮件?
----------------------------
如果是一个线程的话,我发邮件第一个要6秒一个,太慢了
所以我想开100个线程来发谢谢