AccessViolationException в StreamReader.ReadToEnd () - PullRequest
2 голосов
/ 17 августа 2011

Иногда я получаю AccessViolationException при вызове ReadToEnd () в потоке ответов WebRequest.

Я создаю фоновый поток для этой операции, публикую результаты обратно в поток пользовательского интерфейса и позволяю потоку выйти самостоятельно. Мое приложение делает это примерно раз в минуту. Кажется, он работает в течение нескольких часов, а затем случайно падает.

Может кто-нибудь помочь мне понять, почему это происходит?

Большое спасибо!

Код

String uri = ... ;
String data;

WebRequest request = WebRequest.Create(uri);
request.Timeout = (int) TimeSpan.FromSeconds(30).TotalMilliseconds;

using (Stream stream = request.GetResponse().GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
    data = reader.ReadToEnd(); // <-- exception...sometimes...

Исключение

System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at System.Net.UnsafeNclNativeMethods.OSSOCK.recv(IntPtr socketHandle, Byte* pinnedBuffer, Int32 len, SocketFlags socketFlags)
at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags, SocketError& errorCode)
at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
--- End of inner exception stack trace ---
at System.Net.ConnectStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at System.IO.StreamReader.ReadBuffer()
at System.IO.StreamReader.ReadToEnd()
at // my code here
...