Hôm nay tôi nhận thấy có điều gì đó kỳ lạ với lớp MemoryStream
. Thuộc tính .Length
là long
, nhưng thuộc tính .Capacity
, có lẽ luôn là >= .Length
chỉ là int
.Kiểu dữ liệu cho MemoryStream.Capacity vs MemoryStream.Length
Tôi biết rằng sẽ mất một luồng trên GB để cho Độ dài vượt quá khả năng có thể, nhưng điều này có vẻ rất lạ đối với tôi. Không thể thay đổi Length
vì nó được kế thừa từ Stream
, nhưng tại sao không thực hiện Capacity
a long
? Điều gì sẽ xảy ra với công suất nếu bạn do có số MemoryStream
vượt quá chiều dài int.MaxValue
?
FWIW, .NET Framework 4.5 cho phép tạo mảng lớn hơn 2GB trên nền tảng 64 bit bằng cách đặt ['gcAllowVeryLargeObjects'] (http://msdn.microsoft.com/en-us/library/hh285054 (v = vs.110)) .aspx) bên trong 'app.config'. –
@YuvalItzchakov Vẫn có giới hạn về số lượng _indexes_ đối với mảng lớn, nhỏ hơn 2^31 (chi tiết trong liên kết của bạn). '' MemoryStream'' sẽ vẫn chỉ có thể giữ một chút ít hơn 2GB với chuyển đổi đó được kích hoạt. – danwyand