在 GPU C# 上获取 Vsync 状态
Posted
技术标签:
【中文标题】在 GPU C# 上获取 Vsync 状态【英文标题】:Get Vsync status on GPU C# 【发布时间】:2019-07-26 15:45:27 【问题描述】:我正在开发一个 .net 核心应用程序,我需要在其中检索尽可能多的有关系统的信息。我已经设法检索了很多,但是,我正在努力找出 GPU 是否打开了 Vsync。我已经为 Nvidia GPU 尝试了 NvApi Wrapper,但无法让它工作,因为它在尝试初始化它时抛出异常(无法加载 nvapi64.dll)。最初的 NvApi 是用 C 语言编写的,仅仅为这个特定的东西制作一个 Wrapper 似乎有点太多了。我想一定有更简单的方法来获取这些信息。
我也尝试使用ManagementObjectSearcher
获取值,如下所示,但它不会返回 vsync 是否处于活动状态:
var managementObjectSearcher = new ManagementObjectSearcher("select * from Win32_VideoController");
foreach (ManagementObject obj in managementObjectSearcher.Get())
foreach(var prop in obj.Properties)
Console.WriteLine($"Name: prop.Name Value: prop.Value");
【问题讨论】:
@Isma 谢谢 :-) 你可以使用 DirectX 吗? @Isma 不,我试过了,但无法弄清楚 Vsync 是启用还是禁用。 您使用的是 Windows 窗体还是 WPF? @Isma 两者都不是,它是一个 .net Core 2.0 应用程序。 【参考方案1】:我可以使用为 OpenGL 提供托管包装器的开源库 OpenTK 获得您需要的信息,有关更多信息,请参阅 here。
首先,添加兼容.net core的NuGet包:
Install-Package OpenTK.NetStandard -Version 1.0.4
然后,您可以使用GameWindow
的实例创建一个虚拟类,您将可以访问您正在寻找的信息(以及其他信息):
public sealed class DummyInfoGameWindow : GameWindow
private DummyInfoGameWindow()
public static DummyInfoGameWindow InitAndGetInfo()
return new DummyInfoGameWindow();
然后只需从您的代码中调用静态方法:
static void Main(string[] args)
var info = DummyInfoGameWindow.InitAndGetInfo();
Console.WriteLine($"VSync enabled info.VSync");
Console.Read();
输出是:
VSync enabled On
【讨论】:
以上是关于在 GPU C# 上获取 Vsync 状态的主要内容,如果未能解决你的问题,请参考以下文章
运行 powershell 命令以在 c# 上按进程获取 GPU 使用情况
我将如何从AMD GPU的显示输出中获取图像数据? [处于保留状态]