Как я могу получить общую физическую память в C#?

VS6 раньше позволяла Вам определить значения в autoexp файле, которые позволяют Вам пропустить продвижение в общие функции (например, представить конструкторов в виде строки). При запуске с VS7 эти исключения были перемещены в реестр. Простота использования получает серьезный удар.

В VS7 и более высокой Microsoft, в их мудрости, переместил эти исключения в реестр. Вот некоторые примеры:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\NativeDE\StepOver]
"10"="CString\\:\\:CString=NoStepInto"
"11"=".*\\.c_str.*=NoStepInto"

Ключевые имена представляют поисковый порядок. Значения ключа содержат регулярные выражения VS для поиска.

, Если Вы создаете свои собственные исключения, убедиться завоевать репутацию из представления дизассемблирования. Объявление в источнике не может соответствовать сгенерированному имени компилятора, специально для шаблонных функций.

11
задан Will 27 March 2016 в 06:01
поделиться

5 ответов

Я нашел свою ошибку в: http://www.pinvoke.net/default.aspx/kernel32/GlobalMemoryStatusEx.html

Я изменил

internal static extern bool GlobalMemoryStatusEx(ref MEMORYSTATUSEX lpBuffer);

на

static extern bool GlobalMemoryStatusEx([In, Out] MEMORYSTATUSEX lpBuffer);

и изменил

GlobalMemoryStatusEx(ref statEX);

на

GlobalMemoryStatusEx(statEX);

Он работает правильно. Танки

10
ответ дан 3 December 2019 в 05:58
поделиться

Если c #, вы можете:

Ссылаться на сборку Microsoft.VisualBasic . Затем импортируйте пространство имен Microsoft.VisualBasic.Devices .
И, наконец, используйте ComputerInfo, чтобы получить общий объем физической памяти.

int bytesPerMebibyte = (1 << 20);  // http://physics.nist.gov/cuu/Units/binary.html
ComputerInfo myCompInfo = new ComputerInfo();
string physicalMemory = "Physical Memory: "
    + (myCompInfo.TotalPhysicalMemory / bytesPerMebibyte) + " MB";
4
ответ дан 3 December 2019 в 05:58
поделиться

Как насчет:

My.Computer.Info.TotalPhysicalMemory
My.Computer.Info.AvailablePhysicalMemory
5
ответ дан 3 December 2019 в 05:58
поделиться

вы можете использовать следующие шаблоны:

long memory = Process.GetCurrentProcess().PeakVirtualMemorySize64;

И еще свойства с именами Peak * 64

1
ответ дан 3 December 2019 в 05:58
поделиться

Вы забыли установить statEX.dwLength перед вызовом GlobalMemoryStatusEx .

MEMORYSTATUSEX statEX = new MEMORYSTATUSEX();
statEX.dwLength = (uint)Marshal.SizeOf(typeof(MEMORYSTATUSEX));
GlobalMemoryStatusEx(ref statEX);
0
ответ дан 3 December 2019 в 05:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: