-1

Quartz.Net フレームワークで使用しています。すべてのジョブ (スレッド) には 1 つの Web リクエストしかありません

チェックリストは次のとおりです。

  • ブロックの使用では、すべての使い捨てオブジェクトが使用されます。

    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            using (Stream stream = response.GetResponseStream())
            using (StreamReader reader = new StreamReader(stream))
                str = reader.ReadToEnd();
    
  • ServicePointManager.Expect100Continue = false;
  • ServicePointManager.DefaultConnectionLimit = 1000;
  • ServicePointManager.MaxServicePoints = 1000;
  • request.KeepAlive=false
  • リクエスト。タイムアウト = 5000;
  • request.ReadWriteTimeout = 5000;
  • request.ServicePoint.ConnectionLeaseTimeout = 5000;
  • request.ServicePoint.MaxIdleTime = 5000;

ストップウォッチを使用して Web リクエスト時間を測定しています。これらはそのログです:

異常な Web リクエスト時間: 16333 ミリ秒

異常な Web リクエスト時間: 8350 ミリ秒

異常な Web リクエスト時間: 9846 ミリ秒

異常な Web リクエスト時間: 7545 ミリ秒

異常な Web リクエスト時間: 6662 ミリ秒

異常な Web リクエスト時間: 18332 ミリ秒

何か案が?

PS: この質問は、 Timeout supported Multithreaded Web Requestの要約版です。

4

1 に答える 1

0

この問題から学んだ唯一の教訓: 複数のスレッドで HttpWebRequest を使用している場合は、同期的に使用しないでください。

于 2012-09-14T14:00:24.190 に答える