2011-04-29 36 views
2

請有看看下面的代碼:DOTNET的內存使用(VB.Net 2005/.NET 2.0)

'Create array 
Dim a(10000, 10000) As Integer 
'Print memory of application and physical memory 
Console.WriteLine(Process.GetCurrentProcess.PrivateMemorySize64) 
Console.WriteLine(My.Computer.Info.AvailablePhysicalMemory) 

'Do it twice again 
Dim b(10000, 10000) As Integer 
Console.WriteLine(Process.GetCurrentProcess.PrivateMemorySize64) 
Console.WriteLine(My.Computer.Info.AvailablePhysicalMemory) 

Dim c(10000, 10000) As Integer 
Console.WriteLine(Process.GetCurrentProcess.PrivateMemorySize64) 
Console.WriteLine(My.Computer.Info.AvailablePhysicalMemory) 

For i As Integer = 0 To 10000 
    For j As Integer = 0 To 10000 
     a(i, j) = 0 
    Next 
Next 

Console.WriteLine(My.Computer.Info.AvailablePhysicalMemory) 

和我的系統上的輸出:

430125056 
2466795520 
839479296 
2463166464 
1273315328 
2461618176 
2065424384 

每次初始化數組,佔地約正如預期的那樣,400MB的應用程序內存。但是在使用值填充其中一個數組後,可用物理內存僅減少了400MB(任務管理器在for循環之後也只顯示了400MB ...)。

我一直以爲一個初始化的整數數組佔據了整個所需的內存,因爲它被填充爲0.有什麼意義呢?

+0

操作系統用來管理實際物理內存與進程的虛擬內存空間不會有任何直接關聯。可用的物理內存不會告訴你任何有用的東西,因爲它會因外部因素(其他進程在運行,操作系統在交換等方面有多激進等)而改變 – Joe 2011-04-29 15:27:40

+0

在附註中,我討厭'對於數組聲明而言,Dim變量(大小)與type類似,因爲它看起來非常像VB6中的靜態數組,儘管它是動態分配的。作爲type()=新類型(size){}'的Dim變量在實際發生的事情上更加清晰。 – ja72 2011-05-19 14:06:38

回答

1

AvailablePhysicalMemory(http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.devices.computerinfo.availablephysicalmemory.aspx)

甲ULONG含有字節 的數目免費物理內存爲 計算機。

我認爲鑰匙有'物理'記憶。我的理解是,說出你可用的內存的實際硬件級別。

PrivateMemorySize64是內存'分配'到當前進程。但是,想想頁面交換;一個進程的內存不一定是物理的。

編輯:我認爲喬的評論比我的回答更好地回答這個問題 - 哈哈!

0

.Net環境使用垃圾收集,這可以讓設計人員免於操作內存的需要。 .Net爲你做這一切,並且確實做得很好,節省了大量的內存,錯誤和開發時間。