我的问题有点复杂,我不知道如何最好地解释它
我有一个 125k 的公共代理列表。你也可以猜到,大部分都是无效的
我想快速测试所有这些
所以我编写了一个应用程序,它通过以下方式产生 250 个并发获取任务Parallel.ForEach
所以我不断地通过 250 个不同的代理获取相同的页面,看看它们是否有效
每个任务使用其中一个代理并获取相同的页面并查看源代码
源代码是否有效,返回true或false
我已将每个主机允许的最大并发连接数设置为 1k
ServicePointManager.DefaultConnectionLimit = 1000;
//This sets to maximum number of concurrent connections to same host
因此,在开始获取几分钟后,我无法通过我的网络浏览器连接任何页面。它在下面的栏中显示为解析主机。
我不确定如何调试确切的问题是什么?
我怀疑DNS解析以某种方式被破坏了。或者发生其他一些错误。欢迎任何想法
我的工作环境是: c# .NET 4.6.2, Windows 8.1, 25 MBs 光纤连接
我正在使用以下获取功能
public static cs_HttpFetchResults func_fetch_Page(string srUrl, int irTimeOut = 60,
string srRequestUserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0",
string srProxy = null,
int irCustomEncoding = 0,
bool blAutoDecode = true, bool blKeepAlive = true) {
cs_HttpFetchResults mycs_HttpFetchResults = new cs_HttpFetchResults();
mycs_HttpFetchResults.srFetchingFinalURL = srUrl;
try {
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(srUrl);
request.CookieContainer = new System.Net.CookieContainer();
if (srProxy != null) {
string srProxyHost = srProxy.Split(':')[0];
int irProxyPort = Int32.Parse(srProxy.Split(':')[1]);
System.Net.WebProxy my_awesomeproxy = new WebProxy(srProxyHost, irProxyPort);
my_awesomeproxy.Credentials = new NetworkCredential();
request.Proxy = my_awesomeproxy;
}
else {
request.Proxy = null;
}
request.Timeout = irTimeOut * 1000;
request.UserAgent = srRequestUserAgent;
request.KeepAlive = blKeepAlive;
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
WebHeaderCollection myWebHeaderCollection = request.Headers;
myWebHeaderCollection.Add("Accept-Language", "en-gb,en;q=0.5");
myWebHeaderCollection.Add("Accept-Encoding", "gzip, deflate");
request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
using(WebResponse response = request.GetResponse()) {
using(Stream strumien = response.GetResponseStream()) {
Encoding myEncoding = Encoding.UTF8;
using(StreamReader sr = new StreamReader(strumien, myEncoding)) {
mycs_HttpFetchResults.srFetchBody = sr.ReadToEnd();
mycs_HttpFetchResults.blResultSuccess = true;
}
}
}
}
catch {
}
return mycs_HttpFetchResults;
}
过了一会儿,我注意到服务主机本地系统在内存使用方面变得更大