ASP .NET c # извлекает общее использование не страничной памяти удаленно - PullRequest
1 голос
/ 31 мая 2009

Я работаю над простой проверкой работоспособности ASP .NET и натолкнулся на несколько препятствий.

1) Мне нужно иметь возможность полностью использовать нестраничное использование памяти с удаленной машины (в той же сети). Я попытался использовать System.Diganostics.Process.NonpagedSystemMemorySize64, однако я пришел к выводу, что невыгружаемое использование ядра будет отсутствовать из этого общего количества. Вот краткий пример того, что я делал:

Process[] myprocess = Process.GetProcesses("computername");

foreach (Process p in myprocess)
{
nonpaged += p.NonpagedSystemMemorySize64;
}

2) Я могу преодолеть это локально с помощью System.Diagnostics.PerformanceCounter, однако вы можете получить доступ к API для этого класса только локально. Есть ли другой класс, который бы соответствовал моим потребностям?

Любая помощь будет оценена.

1 Ответ

1 голос
/ 02 июня 2009

Одним из решений, которое я использовал для этого, чтобы получить диагностику машины ранее, было использование DLLImport.

См. P-Invoke

Надеюсь, это поможет

Пит

В ответ на ваш комментарий

При использовании импорта DLL вы должны объявить обертку функции самостоятельно. В приведенном ниже коде вы можете увидеть открытый статический extern void, который говорит компилятору, что это внешний вызов функции GlobalMemoryStatus, которая находится в DLLImported kernel32.dll. Структура MemoryStatus, которая является выходным параметром функции, заполняется внутри библиотеки kernel32 и возвращается обратно полностью заполненной.

Скопируйте это в свой код и прочитайте комментарии, они должны помочь вам понять это.

/// <summary>
        /// Populates a memory status struct with the machines current memory status.
        /// </summary>
        /// <param name="stat">The status struct to be populated.</param>
        [DllImport("kernel32.dll")]
        public static extern void GlobalMemoryStatus(out MemoryStatus stat);


        /// <summary>
        /// The memory status struct is populated by the GlobalMemoryStatus external dll call to Kernal32.dll.
        /// </summary>
        public struct MemoryStatus
        {
            public uint Length;
            public uint MemoryLoad;
            public uint TotalPhysical;
            public uint AvailablePhysical;
            public uint TotalPageFile;
            public uint AvailablePageFile;
            public uint TotalVirtual;
            public uint AvailableVirtual;
        } 

// copy the guts of this method and add it to your own method.
public void InspectMemoryStatus()
{

MemoryStatus status = new MemoryStatus();
            GlobalMemoryStatus(out status);

    Debug.WriteLine(status.TotalVirtual);
}

Это должно позволить вам получить диагностику памяти машины.

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