多线程采集到一定数据量卡住不动,贴代码求助大神
多线程 url --------------------编程问答-------------------- 那边双江的新闻还没看完,帮顶先 --------------------编程问答-------------------- 李双江又被儿子坑了 --------------------编程问答-------------------- 看看内存和cpu的使用情况呗 --------------------编程问答--------------------
foreach (string url in queue) //遍历,线程池
{
ThreadPool.QueueUserWorkItem(new WaitCallback(CheckFile), url);
}
void CheckFile(object url) //数据传入
{
foreach (string str in filenameArr)
{
try
{
string strUrlFile2 = UriFile(url.ToString(), str);
toollblUrl.Text = strUrlFile2;
HttpWebResponse response = Com.WebResponse(strUrlFile2);
if (response.StatusCode == HttpStatusCode.OK && response.ContentLength > int.Parse(txtSize.Text) * 1024 && response.ContentType.ToLower() != "text/html")
{
txtResult.Text += response.ResponseUri + response.Server + response.Method + response.StatusCode + response.ContentLength + "\r\n";
File.AppendAllText(path + "Data\\success.txt", DateTime.Now + "\t" + response.ResponseUri + "\t" + response.ContentLength.ToString() + "\r\n");
}
}
catch (Exception ex)
{
//textBox2.Text += ex.Message + "\r\n";
}
}
public static HttpWebResponse WebResponse(string strUrlFile)
{
try
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strUrlFile);
req.Method = "HEAD";
req.Timeout = 3000;
req.ProtocolVersion = HttpVersion.Version11;
req.AllowAutoRedirect = false;
req.Accept = "*/*";
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
return res;
}
catch (Exception)
{
}
return null;
}
内存和cpu使用率还有很多富裕 --------------------编程问答-------------------- 求助大牛神一般的回复 --------------------编程问答-------------------- 你这个取不别人的数据
你的IP不断去访问服务器,
别人服务器是不是做了限制的,
你往这方面去查下 --------------------编程问答--------------------
但是我不是设置timeout了吗 --------------------编程问答--------------------
如果别人服务器把你的ip屏蔽了,
你通过浏览器来打开其网址都打不开的,
你怎么可能取到数据呢,
只要卡起不动了,你就断点进去看看,
是不是没有取数据
--------------------编程问答--------------------
如果是这样的话,timeout没有效的话,应该怎么办呢 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- queue 里面是不是太多了。你这种写法有问题的。
foreach (string url in queue) //遍历,线程池
{
ThreadPool.QueueUserWorkItem(new WaitCallback(CheckFile), url);
}
--------------------编程问答--------------------
queue有那应该在什么控制范围呢
补充:.NET技术 , C#