2009-06-11 17 views
9

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

+0

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

+0

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

Trả lời

10

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.)

+0

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

+1

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) –

+0

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

6

"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

http://blogs.msdn.com/b/somasegar/archive/2012/05/16/net-improvements-for-cloud-and-server-applications.aspx

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