[英]Enable high-performance GPU for a .NET app
用户抱怨我的应用程序(使用Direct3D 11渲染一些重型3D内容以实现类似CAD的功能)在双GPU系统上的英特尔GPU上运行。
发现NvOptimusEnablement
/ AmdPowerXpressRequestHighPerformance
导出变量。 但是,应用程序有.NET前端,无法从那里导出东西。 虽然有一些解决方法 ,但重新编译步骤会破坏调试器(不能再设置断点)并使调试符号无效,我需要它们才能可靠地工作。
还有其他想法吗?
是否可以在安装时创建nVidia应用程序配置文件?
或者,我如何使用NVApi选择高性能GPU?
我使用自定义WIX操作创建了一个C ++ DLL,它在安装时创建/更新应用程序的配置文件,并在卸载时将其删除。
虽然几乎没有记录,但官方的nVidia API具有所需的NvAPI_DRS_ *功能。
这是一个工作流程: NvAPI_Initialize
(如果失败则表示用户没有nVidia GPU,这不是错误), NvAPI_DRS_CreateSession
, NvAPI_DRS_LoadSettings
, NvAPI_DRS_FindProfileByName
。
如果未找到,则NvAPI_DRS_CreateProfile
和三次调用NvAPI_DRS_SetSetting
,设置三个DWORD属性:
然后,调用NvAPI_DRS_GetProfileInfo
得到应用,其次是数NvAPI_DRS_EnumApplications
,并搜索EXE路径。
卸载时,我删除的完整个人资料,通过调用NvAPI_DRS_FindProfileByName
然后NvAPI_DRS_DeleteProfile
。
在重新安装和升级时,我同时执行这两项操作,先删除然后添加
最后不要忘记NvAPI_DRS_SaveSettings
。
PS最意想不到的是,nVidia“规范化”存储在NVDRS_APPLICATION :: appName字段中的路径,它们将它们转换为小写,并将'\\'
替换为'/'
。 由于这种“规范化”,没有标准的字符串比较函数可以用于它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.