У меня есть библиотека рендеринга на основе .net / DirectX. При запуске программы мы пытаемся выяснить объем физического видео ОЗУ. Важно определить объем физической видеопамяти, чтобы узнать, сколько можно использовать для текстур (если вы работали с серьезным DirectX, вы, вероятно, уже знаете).
Видеопамять обнаруживается путем выполнения следующего кода WMI:
var searcher = new ManagementObjectSearcher("Select * from Win32_VideoController");
foreach(ManagementObject videoCard in searcher.Get())
{
_numVideoCards++;
foreach (PropertyData propertyData in videoCard.Properties)
{
if (propertyData.Name == "AdapterRAM" && propertyData.Value != null)
{
_adapterRAM = Math.Max( (UInt32)(propertyData.Value), _adapterRAM );
}
}
}
Этот код был написан несколько лет назад людьми, которые знали DirectX лучше меня.
Проблема в том, что этот вызов теперь непредсказуемо завершается с ошибкой на оборудовании клиента (_adapterRAM == 0 после завершения кода и регистрации исключения).
Я бы хотел изменить тест, но я колеблюсь, потому что ожидаю, что есть причина, по которой видеопамять определяется таким образом, и напрямую через DirectX.
У меня двоякий вопрос:
- Кто-нибудь знает, почему вы делаете это с WMI и / или
- знаете ли вы более надежный способ определения объема физического видео ОЗУ?
P.S .: Нас не интересуют видеокарты с общей памятью (например, Intel). Мы используем SlimDX, если это имеет значение.