请看下面的代码:
'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 :(得分:1)
AvailablePhysicalMemory (http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.devices.computerinfo.availablephysicalmemory.aspx)
包含字节数的ULong 自由物理记忆的 计算机。
我认为关键在于“物理”记忆。我的理解是说到你可用的实际硬件存储级别。
PrivateMemorySize64是“分配”给当前进程的内存。但是,想想页面交换;进程的内存根本不必是物理的。
编辑:我认为Joe的评论比我的回答更能回答这个问题 - doh!答案 1 :(得分:0)
.Net环境使用垃圾收集,这使设计人员无需操作内存。 .Net为您完成这一切,实际上做得很好,节省了大量内存,错误和开发时间。