Tôi đã đọc (http://blogs.msdn.com/joshwil/archive/2005/08/10/450202.aspx) rằng kích thước tối đa của đối tượng trong .NET là 2 GB. Tôi có đúng với giả định rằng nếu tôi có một đối tượng chiếm 256 MB bộ nhớ, vì nó là một loại tham chiếu, tôi có thể có một mảng của các đối tượng 256 MB, nơi tất cả các đối tượng với nhau có thể chiếm> 2GB bộ nhớ như miễn là kích thước của mảng tham chiếu nằm dưới 2 GB?.NET Max Memory Sử dụng 2GB ngay cả đối với x64 Assemblies
Trả lời
Có, giả định của bạn là chính xác.
Giới hạn 2GB áp dụng cho từng đối tượng riêng lẻ. Tổng bộ nhớ được sử dụng cho tất cả các đối tượng có thể vượt quá 2GB.
(Cho dù thời gian chạy là có thể phân bổ đủ bộ nhớ cho yêu cầu của bạn là một vấn đề khác. Tôi nghi ngờ nếu nó có thể tìm thấy một 2GB đầy đủ bộ nhớ tùng trên một máy 32bit, nhưng nó không phải là một vấn đề trên 64bit.)
Vì vậy, "mảng tham chiếu" sẽ là một đối tượng mà (thường) chiếm cùng một lượng không gian như là một "mảng số nguyên"? – Nate
Nate> nó là một chi tiết thực hiện nhưng tham chiếu hiện là con trỏ và vì vậy chúng có cùng kích thước với kích thước con trỏ (Trong C nó giống như sizeof (int) trên hầu hết các hệ thống nhưng trong C# int luôn có nghĩa là Int32) –
là kỳ quái xem xét lớp .NET của Array có các phương thức đặc biệt lấy các đối số chiều dài mảng dài. Nếu giới hạn là 2GB thì không thể cho độ dài mảng tràn một int 32 bit. – Qwertie
"Trong .NET 4 và trước đó, không có đối tượng nào có kích thước lớn hơn 2GB, ngay cả trong quy trình 64 bit. Tuy nhiên, đối với khối lượng công việc nhất định sử dụng mảng lớn, giới hạn kích thước này có thể bị hạn chế. NET 4.5 hỗ trợ nâng giới hạn cho các mảng trong các quy trình 64 bit, sao cho các mảng có thể lớn hơn 2GB, điều này có nghĩa là bạn có thể phân bổ một mảng Int32.MaxValue Int32s, mặc dù mảng đó sẽ tiêu thụ 8GB. Các đối tượng lớn trong .NET được phân bổ trên một vùng đặc biệt, được biết đến không phải ngẫu nhiên là Heap đối tượng lớn (LOH); cũng đã thấy những cải tiến đáng kể về hiệu năng đối với LOH, bao gồm việc sử dụng các thuật toán tốt hơn để quản lý bộ nhớ trống trong heap. "
http://msdn.microsoft.com/en-us/library/hh285054(v=VS.110).aspx
- 1. Liên kết .Net Assemblies
- 2. Sử dụng lệnh tee ngay lập tức ngay cả đối với một lệnh
- 3. .NET Out Of Memory Exception - Được sử dụng 1.3GB nhưng có 16GB cài đặt
- 4. SMO Assemblies in .Net Framework 4.0
- 5. Xác nhận hợp lệ .NET Framework Assemblies
- 6. .NET RegEx "Memory Leak" điều tra
- 7. Sử dụng PresentationCore và WindowsBase dlls trong cả x64 và x86 môi trường
- 8. Capistrano sử dụng sudo ngay cả với "set: use_sudo, false"
- 9. WiX: đăng ký thành phần .NET COM cả x86 x64
- 10. Giới hạn 2GB đối với kích thước tệp khi sử dụng fwrite trong C?
- 11. Drop DB sử dụng MSBuild ngay cả khi sử dụng
- 12. Tải tất cả các assembly được tham chiếu .NET ngay cả khi không được sử dụng một cách rõ ràng trong mã
- 13. x64 .NET compilation/Process Explorer oddity
- 14. Sử dụng ClassInterfaceType.AutoDual thực sự là một ý tưởng tồi, ngay cả với VB6?
- 15. Memory rò rỉ với ConcurrentQueue
- 16. Chọn tất cả các lĩnh vực tương ứng sử dụng MAX và GROUP BY
- 17. Thời gian khởi động EF 7 giây ngay cả đối với DbContext
- 18. Làm thế nào tôi có thể biết tôi đang sử dụng x64 hay x86 bằng .NET?
- 19. Có đáng để lưu các đối tượng được tạo bởi Del Memory Memory Manager không?
- 20. celerybeat sử dụng UTC ngay cả với các thiết lập múi giờ
- 21. thiếu sót Auto Increment khi sử dụng INSERT ... SELECT ngay cả với innodb_autoinc_lock_mode = 0
- 22. Oracle luôn sử dụng HASH JOIN ngay cả khi cả hai bảng đều lớn?
- 23. xây dựng dự án x64 C# với kết quả msbuild trong mục tiêu 32bit
- 24. Tại sao tôi phải sử dụng URI.encode ngay cả ký tự an toàn cho Net :: HTTP requests?
- 25. Modules, Assemblies, Headers trong CLR
- 26. Liên kết cấu trúc C++ x86/x64 + Sử dụng thư viện .NET AnyCPU C++ (gọi/gọi lại)
- 27. Biên dịch cho cả x86 và x64
- 28. SqlDataAdapter.Fill là quá chậm ngay cả đối với một bản ghi
- 29. Tên miền chéo ajax không thành công ngay cả đối với tệp cục bộ
- 30. Biên dịch cho x64 với Visual Studio?
Thú vị câu hỏi. Tôi không biết sẽ có giới hạn này trên một máy 64 bit. Điều đó nói rằng tôi không thể nghĩ ra nhiều kịch bản cho một ứng dụng chứa 2GB trong một đối tượng! – RichardOD
Tôi đồng ý, không có nhiều tình huống mà bạn sẽ cần nhiều hơn 2 GB trong một đối tượng duy nhất. Một máy chủ trò chơi hoặc máy chủ cơ sở dữ liệu thực sự là điều duy nhất xuất hiện trong đầu bạn. – Nate