Visual Basic 查找 GPU 专用内存 NVIDIA 或 AMD

Visual Basic find GPU dedicated memory NVIDIA or AMD

我试图在他们的 GPU 上找到用户的专用 RAM。我在网上找到了非常适合使用 WMI 查找不同 GPU 属性的代码,但是 none 的属性 return 类似于专用内存的“4 GB”。最接近的是 AdapterRAM,但 return 是一个与我的目的无关的巨大数字。

        Dim arr() As String = Nothing
        Dim int As Integer
        Dim objWMIService As Object
        Dim colDevices As Object
        Dim objDevice As Object
        objWMIService = GetObject("winmgmts:\.\root\cimv2")
        colDevices = objWMIService.ExecQuery("Select AdapterRAM From Win32_VideoController")

        For Each objDevice In colDevices
            ReDim Preserve arr(int)
            arr(int) = objDevice.AdapterRAM
            int += 1
        Next objDevice

        colDevices = Nothing
        objWMIService = Nothing
        Return arr

是否有任何其他方法、接口等可以找到用户专用的 GPU 内存。它应该 return 类似于“4 GB”

其中一种方法是使用 DXGI。 例如:

使用 DXGI 声明:(我无法粘贴它们,太大了...)VB_DXGI.vb =>

Dim hr As HRESULT = HRESULT.E_FAIL
Dim pFactory1 As IDXGIFactory1 = Nothing
Dim IID_IDXGIFactory1 As Guid = New Guid("770AAE78-F26F-4DBA-A829-253C83D1B387")
hr = CreateDXGIFactory1(IID_IDXGIFactory1, pFactory1)
If ((hr = HRESULT.S_OK) And (pFactory1 IsNot Nothing)) Then
    Dim i As Integer = 0
    Dim pAdapter1 As IDXGIAdapter1 = Nothing
    While (pFactory1.EnumAdapters1(CUInt(i), pAdapter1) <> DXGI_ERROR_NOT_FOUND)
        Dim dxAdapterDesc As DXGI_ADAPTER_DESC = New DXGI_ADAPTER_DESC()
        hr = pAdapter1.GetDesc(dxAdapterDesc)
        Console.WriteLine("Adapter Name: {0}", dxAdapterDesc.Description)
        Console.WriteLine("Dedicated Video Memory : {0}", dxAdapterDesc.DedicatedVideoMemory.ToString())
        Console.WriteLine("Shared System Memory : {0}", dxAdapterDesc.SharedSystemMemory.ToString())
        Console.WriteLine("Dedicated System Memory : {0}", dxAdapterDesc.DedicatedSystemMemory.ToString())
        Console.WriteLine("Total Memory : {0}", (dxAdapterDesc.DedicatedVideoMemory + dxAdapterDesc.SharedSystemMemory + dxAdapterDesc.DedicatedSystemMemory).ToString())
        Dim pOutput As IDXGIOutput = Nothing
        Dim j As Integer = 0
        While (pAdapter1.EnumOutputs(CUInt(j), pOutput) <> DXGI_ERROR_NOT_FOUND)
            Dim outputDesc As DXGI_OUTPUT_DESC = New DXGI_OUTPUT_DESC()
            hr = pOutput.GetDesc(outputDesc)
            Console.WriteLine(vbTab + "Device : {0} ({1}, {2}, {3}, {4})", outputDesc.DeviceName, outputDesc.DesktopCoordinates.left, outputDesc.DesktopCoordinates.top, outputDesc.DesktopCoordinates.right, outputDesc.DesktopCoordinates.bottom)
            j += 1
            Marshal.ReleaseComObject(pOutput)
            pOutput = Nothing
        End While
        i += 1
        Marshal.ReleaseComObject(pAdapter1)
        pAdapter1 = Nothing
    End While
    Marshal.ReleaseComObject(pFactory1)
End If