-1

現在使用しているサービスで高い CPU 使用率を特定しようとしていますが、無限ループを引き起こしている可能性のある領域がいくつかあると考えています。以下は、無限ループを引き起こす可能性があると思われるコードです。while ループが無期限に実行される原因となる特定のものはありますか?

            WebRequest request = WebRequest.Create(Url);
            request.ContentLength = formDataLength;
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";

            using (Stream rs = request.GetRequestStream())
            {
                ASCIIEncoding encoding = new ASCIIEncoding();
                var postData = encoding.GetBytes(formData);
                rs.Write(postData, 0, postData.Length);

                string str = string.Empty;
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    using (Stream sm = response.GetResponseStream())
                    {
                        int totalBytesRead = 0;
                        long responseBytesToRead = 1024;
                        byte[] buffer = new byte[responseBytesToRead];
                        int bytesRead;
                        do
                        {
                            bytesRead = sm.Read(buffer, totalBytesRead, (int)(responseBytesToRead - totalBytesRead));
                            totalBytesRead += bytesRead;
                        } while (totalBytesRead < bytesRead);

                        request.Abort();
                        str = Encoding.Default.GetString(buffer);
                    }
                }
                return str;
           }
4

2 に答える 2

1

MSDNドキュメントから:

戻り値
の型: System.Int32 バッファーに読み込まれた合計バイト数。これは、要求されたバイト数が現在使用できない場合は要求されたバイト数よりも少なくなる可能性があり、ストリームの終わりに達した場合はゼロ (0) になる可能性があります。

0 はストリームの終わりを示します。ストリームの終わりに到達するための条件は既に定義されています。あなたが依存している条件は、信頼できない可能性があり、不要です。

試す

while(bytesRead != 0)

于 2013-04-30T15:46:34.607 に答える
0

StreamReader を使用することをお勧めします

 using (StreamReader reader = new StreamReader(response.GetResponseStream()))
...
 reader.ReadToEnd();

// or

 while (!reader.EndOfStream)
 {
    // do read.
 }
于 2013-04-30T15:47:06.830 に答える