Вы должны войти, чтобы создавать сообщения и темы.

Как определить размер памяти видеокарты?

Всем доброго времени суток!
Как определить размер памяти видеокарты?
Через Win32_VideoController больше 4GB не показывает

Приветствую, вот тут есть путь в реестре к нужной ветке, отвечающей за информацию о видеокарте. Там есть параметр СкопированоHardwareInformation.qwMemorySize, который хранит в шестнадцатеричном виде информацию об объёме видеопамяти твой карты. Считывай его, переводи в десятичную и дели два раза на 1024 - получишь значение в мегабайтах, поделив ещ раз на 1024 - получишь Гигабайты

Спасибо
Сделал так:

using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SYSTEM\ControlSet001\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\0000", true))
{
    string gpuram = key?.GetValue("HardwareInformation.qwMemorySize")?.ToString();
    int intgpuram;
    intgpuram = int.Parse(gpuram);
    label1.Text = (intgpuram / 1024 / 1024 / 1024 + " GB");
}

Запускаю где 1GB память работает,
Запускаю где 8GB память не запускается
System.OverflowException: "Значение было недопустимо малым или недопустимо большим для Int32."
как решать?

Цитата: Komoliddin от 19.04.2021, 08:03

System.OverflowException: "Значение было недопустимо малым или недопустимо большим для Int32."
как решать?

Добрый день.
Блин, когда же вы уже сами научитесь думать самостоятельно, своей головой? У вас же в тексте сообщения об ошибке все написано, читайте. Это мысли вслух, отвечать не надо...
Максимальное значение, допустимое для Int32 он же int - 2147483647. Для того, что бы использовать числа больше этого, необходимо использовать Int64, он же long.
P.S. Правильнее и лаконичнее это сделать так:

label1.Text = (UInt64.Parse(key?.GetValue("HardwareInformation.qwMemorySize")?.ToString()) / Math.Pow(1024,3) + " GB");

В вашем варианте (Скопировано / 1024 / 1024 / 1024), если будет, например, дробный объем памяти (0.5 G, например, на какой-нибудь старой видеокарте), у вас выдаст 0Gb, т.к. будет производиться деление целочисленных значений, а при использовании СкопированоMath.Pow будет обработка чисел с плавающей запятой (double).

Есть еще другой аспект - ветка СкопированоHKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\0000\ доступна только для администратора, т.е. при включенном UAC и запуске программы без прав администратора получите исключение СкопированоSystem.Security.SecurityException: Запрошенный доступ к реестру запрещен.

Лайкнули Mikhail и Komoliddin
MikhailKomoliddin
Цитата: Adler от 19.04.2021, 09:23
label1.Text = (UInt64.Parse(key?.GetValue("HardwareInformation.qwMemorySize")?.ToString()) / Math.Pow(1024,3) + " GB");

Скопировано

Спасибо все работает! 
А путь к память всегда будет так, или везде разный?
"SYSTEM\ControlSet001\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\0000"

Это документированный Microsoft класс. Тут вопрос скорее всего в другом, как это будет работать когда в системе две видеокарты (встроенная и дискретная).