Tôi đang thử nghiệm ứng dụng web và đã thiết lập chương trình kiểm tra cửa sổ xoay một số chuỗi và gửi yêu cầu web trên mỗi chủ đề.Số lượng tối đa HttpWebRequests đồng thời
Vấn đề là tôi nhận được kết quả như sau:
01/09/09 11:34:04 Starting new HTTP request on 10
01/09/09 11:34:04 Starting new HTTP request on 11
01/09/09 11:34:04 Starting new HTTP request on 13
01/09/09 11:34:05 Starting new HTTP request on 14
01/09/09 11:34:05 Starting new HTTP request on 11
01/09/09 11:34:05 11 has finished!
01/09/09 11:34:05 Starting new HTTP request on 13
01/09/09 11:34:05 13 has finished!
01/09/09 11:34:05 Starting new HTTP request on 14
01/09/09 11:34:05 14 has finished!
01/09/09 11:34:05 Starting new HTTP request on 11
01/09/09 11:34:05 11 has finished!
01/09/09 11:34:05 Starting new HTTP request on 14
01/09/09 11:34:05 14 has finished!
01/09/09 11:34:05 Starting new HTTP request on 13
01/09/09 11:34:05 13 has finished!
01/09/09 11:34:05 Starting new HTTP request on 15
01/09/09 11:34:06 Starting new HTTP request on 11
01/09/09 11:34:06 11 has finished!
01/09/09 11:34:06 Starting new HTTP request on 14
01/09/09 11:34:06 14 has finished!
mà loại trông giống như có một tối đa là 5 chủ đề, ngay cả khi tôi tạo ra 100 như vậy:
int numberOfThreads = Convert.ToInt32(txtConcurrentThreads.Text);
List<BackgroundWorker> workers = new List<BackgroundWorker>();
for (int N = 0; N < numberOfThreads; N++)
{
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
workers.Add(worker);
}
foreach(BackgroundWorker worker in workers)
{
worker.RunWorkerAsync();
}
bất cứ ai có thể soi sáng cho tôi như những gì đang xảy ra?
Cảm ơn
EDIT: Nếu như đề nghị tôi ngủ trong vòng 5 giây, thay vì HttpWebRequest, sau đó tôi nhận được thêm bài bắn nhưng không nhiều như tôi lại có thể ngờ:
01/09/09 11:56:14 Starting new HTTP request on 7
01/09/09 11:56:14 Starting new HTTP request on 11
01/09/09 11:56:15 Starting new HTTP request on 12
01/09/09 11:56:15 Starting new HTTP request on 13
01/09/09 11:56:16 Starting new HTTP request on 14
01/09/09 11:56:16 Starting new HTTP request on 15
01/09/09 11:56:17 Starting new HTTP request on 16
01/09/09 11:56:17 Starting new HTTP request on 17
01/09/09 11:56:18 Starting new HTTP request on 18
01/09/09 11:56:19 Starting new HTTP request on 7
01/09/09 11:56:19 7 has finished!
01/09/09 11:56:19 Starting new HTTP request on 11
01/09/09 11:56:19 11 has finished!
01/09/09 11:56:19 Starting new HTTP request on 19
01/09/09 11:56:20 Starting new HTTP request on 20
01/09/09 11:56:20 Starting new HTTP request on 12
01/09/09 11:56:20 12 has finished!
Nó vẫn có vẻ như tôi chỉ nhận được 2 chủ đề bắt đầu mỗi giây, điều đó có vẻ mạnh mẽ với tôi. Tôi cho rằng Console.WriteLine có thể là một vấn đề?
EDIT: Tôi thiết
ThreadPool.SetMinThreads(100, 4);
và
System.Net.ServicePointManager.DefaultConnectionLimit = 100;
và nhận được kết quả như sau:
01/09/09 14:00:07 Starting new HTTP request on 11
01/09/09 14:00:07 Starting new HTTP request on 81
01/09/09 14:00:07 Starting new HTTP request on 82
01/09/09 14:00:07 Starting new HTTP request on 79
01/09/09 14:00:07 Starting new HTTP request on 83
01/09/09 14:00:07 Starting new HTTP request on 84
01/09/09 14:00:07 Starting new HTTP request on 85
01/09/09 14:00:07 Starting new HTTP request on 87
01/09/09 14:00:07 Starting new HTTP request on 88
...
01/09/09 14:00:07 84 has finished! Took 323.0323 milliseconds
01/09/09 14:00:08 88 has finished! Took 808.0808 milliseconds
01/09/09 14:00:08 96 has finished! Took 806.0806 milliseconds
01/09/09 14:00:08 94 has finished! Took 806.0806 milliseconds
01/09/09 14:00:08 98 has finished! Took 801.0801 milliseconds
01/09/09 14:00:08 80 has finished! Took 799.0799 milliseconds
01/09/09 14:00:08 86 has finished! Took 799.0799 milliseconds
01/09/09 14:00:08 92 has finished! Took 799.0799 milliseconds
01/09/09 14:00:08 100 has finished! Took 812.0812 milliseconds
01/09/09 14:00:08 82 has finished! Took 1010.101 milliseconds
nên đã có thể đẩy ra rất nhiều toàn bộ các yêu cầu web đồng thời. Mà dường như xếp hàng (gọi ra một máy chủ STA COM +) vì vậy đó là những gì tôi mong đợi.
Cảm ơn sự giúp đỡ của bạn
Tôi có một câu hỏi cho bạn giải pháp ở đây. theo msdn (https://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit(v=vs.110).aspx), giá trị mặc định là int32 tối đa, đó là cách lớn hơn hơn 100 bạn đặt ở đây. Làm thế nào để nó tạo sự khác biệt ngay cả khi bạn không đặt nó thành 100? Tôi có nghĩa là, tôi loại nghi ngờ nếu bạn giải quyết nó bằng cách thiết lập giới hạn kết nối mặc định của ServicePointManager hoặc thay vì bằng cách thiết lập phần tử connectionManagement trong câu trả lời đầu tiên. – foxwendy
@foxwendy Yeah, MSDN nói là vậy. int.MaxValue, khi tôi đã thử nó trong .NET 4.5 nó chỉ ** 2 ** theo mặc định. – xmedeko