.net/DirectX ベースのレンダリング ライブラリがあります。プログラムの開始時に、物理ビデオ RAM の量を調べようとします。物理ビデオ メモリの量を検出することは、テクスチャに使用できる量を知るために重要です (本格的な directX を行ったことがある場合は、おそらく既にわかっているでしょう)。
ビデオ RAM は、次の 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 を介して検出される理由があると予想されるため、躊躇しています。
私の質問は 2 つあります。
- WMIでこれを行う理由を誰かが知っていますか、および/または
- 物理的なビデオ RAM の量を検出するためのより確実な方法を知っていますか?
PS: 共有メモリ ビデオ カード (Intel など) には興味がありません。それが違いを生む場合は、SlimDX を使用します。