DotNet内存使用(VB.Net 2005 / .NET 2.0)

时间:2011-04-29 15:06:29

标签: .net vb.net memory-management

请看下面的代码:

'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.重点是什么?

2 个答案:

答案 0 :(得分:1)

  

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

     

包含字节数的ULong   自由物理记忆的   计算机。

我认为关键在于“物理”记忆。我的理解是说到你可用的实际硬件存储级别。

PrivateMemorySize64是“分配”给当前进程的内存。但是,想想页面交换;进程的内存根本不必是物理的。

编辑:我认为Joe的评论比我的回答更能回答这个问题 - doh!

答案 1 :(得分:0)

.Net环境使用垃圾收集,这使设计人员无需操作内存。 .Net为您完成这一切,实际上做得很好,节省了大量内存,错误和开发时间。