2010-09-03 26 views
7

Bất cứ ai có thể cho tôi biết tại sao dòng cuối cùng ở đây ném ngoại lệ OOM?Tại sao StreamReader.ReadLine ném OutOfMemoryException?

 byte[] buffer = new byte[1]; 
     buffer[0] = 239; 
     MemoryStream ms = new MemoryStream(buffer); 
     StreamReader sr = new StreamReader(ms); 
     string l1 = sr.ReadLine(); 
     string l2 = sr.ReadLine(); 

Trả lời

8

Xin chúc mừng, bạn đã tìm thấy lỗi trong khuôn khổ .NET. Nó được gây ra bởi giá trị byte, 0xef trong hex. Đó là byte đầu tiên của UTF-8 BOM. Nó không phải là một BOM hoàn thành tất nhiên, hai byte tiếp theo là mất tích. Tuy nhiên, nó đủ để gây nhầm lẫn StreamReader, nó vẫn cố gắng đọc dữ liệu từ luồng mà không bao giờ nhận được bất cứ nơi nào, tiêu thụ bộ nhớ trong khi cố gắng. OOM là, cuối cùng, tiếp theo.

Lỗi này cũng có trong .NET 4.0. Nguồn chính xác của lỗi khó theo dõi, mã liên quan không được bao gồm trong Nguồn tham chiếu. Nó có thể có thể được phân loại là một yếu tố quan trọng vì nó có thể được sử dụng trong một cuộc tấn công DOS. Bạn có thể báo cáo lỗi tại connect.microsoft.com. Hãy cho tôi biết nếu bạn không muốn, tôi sẽ báo cáo (nhiệm vụ MVP).

+0

Lỗi đã mở # 594588 – skb

+0

Được thăng hạng. URL: http://connect.microsoft.com/VisualStudio/feedback/details/594588/why-does-streamreader-readline-throw-outofmemoryexception –

Các vấn đề liên quan