试图追根溯源!
我有一个非常基本的应用程序,它使用 httpwebrequests 登录、导航到一个页面,然后获取该页面的 html。然后,它每 5 分钟循环执行一次对第三页的 Web 请求。
它一切正常并且是单线程的(并且相当旧),但是情况已经改变,我现在需要紧密地一起运行这个应用程序的多个实例(我有一个 .bat 每 2 秒启动一次应用程序作为临时措施,直到我能够编写新的多线程解决方案)。
当应用程序的第一个实例启动时一切正常,第一个请求在约 2 秒内完成。第二个大约 3 秒。
然而,随着这个应用程序的越来越多的实例同时运行(>100),一些奇怪的事情开始发生。
第一个 Web 请求仍然需要大约 2 秒,但是第二个请求会延迟超过 1 分钟,直到超时。我似乎无法思考为什么会这样。第二页比第一页大,但没有什么不寻常的需要> 1分钟才能下载。
该服务器的互联网连接和硬件完全能够处理这些请求。
CookieContainer myContainer = new CookieContainer();
// first request is https
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(https://mysite.com/urlone);
request.CookieContainer = myContainer;
request.Proxy = proxy;
Console.WriteLine(System.DateTime.Now.ToLongTimeString() + " " + "Starting login request");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream resStream = response.GetResponseStream();
string tempString = null;
int count = 0;
do
{
// fill the buffer with data
count = resStream.Read(buf, 0, buf.Length);
// make sure we read some data
if (count != 0)
{
// translate from bytes to ASCII text
tempString = Encoding.ASCII.GetString(buf, 0, count);
// continue building the string
sb.Append(tempString);
}
}
while (count > 0); // any more data to read?
sb.Clear();
response.Close();
resStream.Close();
string output6;
Console.WriteLine(System.DateTime.Now.ToLongTimeString() + " " + "login request comeplete");
HttpWebRequest request6 = (HttpWebRequest)WebRequest.Create(@"http://mysite.com/page2");
request6.CookieContainer = myContainer;
response = (HttpWebResponse)request6.GetResponse();
resStream = response.GetResponseStream();
tempString = null;
count = 0;
do
{
count = resStream.Read(buf, 0, buf.Length);
if (count != 0)
{
tempString = Encoding.ASCII.GetString(buf, 0, count);
sb.Append(tempString);
}
}
while (count > 0);
output6 = sb.ToString();
sb.Clear();
response.Close();
resStream.Close();
有任何想法吗?我对 http web 请求不是很先进,所以如果有人可以检查我没有在上面犯任何愚蠢的代码错误,我将不胜感激。我不知道我可能需要在这里包含哪些其他信息,如果我遗漏了什么,请告诉我,我会尽力提供。提前致谢。
编辑1:
我使用提琴手找出问题的根源。看起来问题在于应用程序(或窗口)由于某种原因没有发送请求 - 根据提琴手的说法,物理请求实际上需要 < 1 秒。