Использование памяти DotNet (VB.Net 2005 / .NET 2.0) - PullRequest
2 голосов
/ 29 апреля 2011

пожалуйста, посмотрите на следующий код:

'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

Каждый инициализированный массив занимает около 400 МБ памяти в приложении, как и ожидалось,Но доступная физическая память уменьшается только на 400 МБ после заполнения одного массива значениями (диспетчер задач также показывает только 400 МБ, использованных после цикла for ...).

Я всегда думал, что инициализированный массив целых чисел занимаетвся необходимая память, потому что она заполнена 0. Какой смысл?

Ответы [ 2 ]

1 голос
/ 29 апреля 2011

В наличииФизическая память (http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.devices.computerinfo.availablephysicalmemory.aspx)

ULong, содержащий количество байтов свободной физической памяти для компьютер.

Я думаю, что ключом является «физическая» память. Насколько я понимаю, если говорить с реальным аппаратным уровнем памяти, который у вас есть.

PrivateMemorySize64 - это память, «назначенная» текущему процессу. Но подумайте о перестановках страниц; эта память для процесса вовсе не должна быть физической.

РЕДАКТИРОВАТЬ: Я думаю, что комментарий Джо отвечает лучше, чем мой ответ - дох!

0 голосов
/ 19 мая 2011

. В среде .Net используется сборщик мусора, который освобождает дизайнера от необходимости использовать память..Net делает все это для вас, и на самом деле делает большую работу, экономя много памяти, ошибок и времени разработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...