我有一个基于 .net/DirectX 的渲染库。在程序启动时,我们尝试找出物理视频 RAM 的数量。检测物理视频内存的数量很重要,要知道有多少可以用于纹理(如果你做过认真的directX,你可能已经知道了)。
通过执行以下 WMI 代码来检测视频 RAM:
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 做这个,和/或
- 你知道一种更可靠的方法来检测物理视频 RAM 的数量吗?
PS:我们对共享内存显卡(例如英特尔)不感兴趣。如果有什么不同,我们会使用 SlimDX。