Trong đoạn mã dưới đây, có khả năng GC sẽ xóa sạch MemoryStream để ToArray không thành công, vì nó nằm ngoài câu lệnh sử dụng?Đang gọi MemoryStream.ToArray() nguy hiểm sau khi xử lý?
private static byte[] getBytes()
{
MemoryStream ms = null;
using (ms = new MemoryStream())
{
// ...
}
return ms.ToArray();
}
Tôi không tìm thấy bất kỳ nội dung nào trong tài liệu, nhưng chúng tôi có các thử nghiệm trong Mono cho điều này và mã hoạt động trong trường hợp này. Btw, không cần phải gọi ms.Close(). – Gonzalo
Chỉ cần lưu ý: Tài liệu .NET 4.0 cho MemoryStream.Close (http://msdn.microsoft.com/en-us/library/system.io.stream.close%28v=vs.100%29.aspx) * không * chứa "Bộ đệm vẫn có sẵn trên MemoryStream khi luồng đã bị đóng." tuyên bố. Làm tôi băn khoăn liệu họ có làm thay đổi hành vi thay đổi không. –
@scottmarlowe: Đó là tài liệu cho Stream.Close. Có vẻ như họ vừa ngừng cung cấp "tài liệu ghi đè" cho MemoryStream.Close. Thay đổi hành vi thực tế có thể đã phá vỡ rất nhiều mã. –