笔记本电脑双显卡 - 如何以编程方式检测和/或选择使用哪一个

时间:2015-04-08 02:32:17

标签: c# directx nvidia direct3d

我们正在开发在Windows 7及更高版本的计算机上使用DirectX进行3D渲染的软件,64位C#/ .NET代码。

我们观察到,我们正在测试的一些较新的戴尔笔记本电脑都配有双显卡。它们具有Intel HD 4600集成显卡,并且还具有更快的NVIDIA Quadro显卡(例如)。

默认情况下,DirectX应用程序使用Intel图形。这样做可能是为了延长电池寿命。但性能明显比NVIDIA卡差。

使用NVIDIA控制面板,用户可以控制默认使用哪一个。一旦用户将其切换为使用NVIDIA显卡,性能就会大幅提升。

所以,我的问题是......在代码中,有没有办法检测此设置和/或为我们的应用程序(安装和/或启动时)修改它?我们是否可以检测到我们的应用程序正在使用英特尔卡,如果是其中一种双卡方案,则提示用户并且可能(如果他们请求)更改它们的设置?

目前我们必须让用户在NVIDIA控制面板中手动进行更改。

其他人有任何处理此问题的经验,并就如何继续进行任何建议?

2 个答案:

答案 0 :(得分:2)

您可以使用C#DLL Interop访问属于NVML (NVidia Management Libraries)GPU Deployment Kit (GDK)的功能。 NVML包括用于枚举和选择GPU设备的以下功能:

nvmlInit()
nvmlDeviceGetPciInfo()
nvmlDeviceGetCount()
nvmlDeviceGetHandleByIndex()
nvmlDeviceGetHandleByPciBusId()

nvmlDeviceSetPersistenceMode()

,许多NVML功能需要管理员访问权限并重新启动才能更改设置。所以这些只有在您的用户对此(可能是在初始安装期间)时才可行。

更好的选择将枚​​举Direct3D设备并选择最合适的设备:Enumerating with DirectX11Enumerating with DirectX9

答案 1 :(得分:0)

答案是你不能,至少有一些例外。 具有双显卡的笔记本电脑通常附带一个软件,可以手动或自动切换您当前使用的卡。还有其他人可以自动检测软件应用程序对更大资源的需求,从而自动切换到nvidia卡。

但是,有一些解决方法,请参阅此thread。此外,我建议您为所有笔记本电脑手动设置默认显卡为nvidia,以消除此问题。

相关问题