//初始化线程池数量
ThreadPool.SetMaxThreads(50, 50);
ThreadPool.SetMinThreads(20, 20);
//这里是增加线程 这些个for循环是在一个方法里 方法又是让timer定时5秒调用一次的
for (int j = 0; j < geturlList.Count; j++)
{
object o = geturlList[j];
ThreadPool.QueueUserWorkItem(sendMyData, o);
}
for (int j = 0; j < this.geturlListUp.Count; j++)
{
object o = geturlListUp[j];
ThreadPool.QueueUserWorkItem(sendMyData, o);
}
for (int x = 0; x < posturlList.Count; x++)
{
string[] tmpstrs = { posturlList[x], refurlList[x], paramList[x] };
object o = tmpstrs;
ThreadPool.QueueUserWorkItem(sendMyDataTwo, o);
}
for (int x = 0; x < this.posturlListUp.Count; x++)
{
string[] tmpstrs = { posturlListUp[x], refurlListUp[x], paramListUp[x] };
object o = tmpstrs;
ThreadPool.QueueUserWorkItem(sendMyDataTwo, o);
}
//这是线程调用的一个方法里边的部分内容
try
{
lock (myparam)//这里的myparam就是传过来的参数
{
string geturlt = myparam.ToString();
if (tureVal)//验证
{
WebRequest wr = WebRequest.Create(geturlt);
wr.Timeout = 15000;//超时
wr.GetResponse().GetResponseStream();
}
}
}
catch (Exception ex)
{
//Console.WriteLine(ex.Message);
//Console.WriteLine(geturlt);
return;
}
//线程调用的另一个方法差不多一样 里边使用了 HttpWebRequest和HttpWebResponse 也是try catch 包 着 lock参数
不知道为啥 开始执行能发送和接收数据 后边1 2分钟吧 线程全是等待 我设置的 Timeout = 15000; 要说如果超时了应当线程也算执行完了吧 应当可以执行下边的线程了吧 但等好久都不执行
以前没用过多线程池 直接for循环new新的线程 有时候会出现内存问题 线程池是第一次用 请高手们帮着讲讲
2 个解决方案
#1
如果线程没有死锁,wr.Timeout = 15000;后加 wr.Proxy = null;
#2
首先上面你那个设置没有什么意义,最大最小!
你设置的只是里面队列长度,不代表并发线程数,并发线程数最大25,平时也就并发10个左右!
你设置的只是里面队列长度,不代表并发线程数,并发线程数最大25,平时也就并发10个左右!
#1
如果线程没有死锁,wr.Timeout = 15000;后加 wr.Proxy = null;
#2
首先上面你那个设置没有什么意义,最大最小!
你设置的只是里面队列长度,不代表并发线程数,并发线程数最大25,平时也就并发10个左右!
你设置的只是里面队列长度,不代表并发线程数,并发线程数最大25,平时也就并发10个左右!