dotnet 对一些 Win32 方法进行 Benchmark 基准性能测试

news/2025/3/1 0:30:50/文章来源:https://www.cnblogs.com/lindexi/p/18674064

本文非严谨测试,仅在我开发机器进行测试,没有在纯净系统和机器上进行测试

开始之前的说明:

本文使用的是 BenchmarkDotNet 进行测试,没有考虑 AOT 之后的调用性能,仅仅只是 Release 版本的 dotnet 程序的调用而已

数值单位说明:

1,000,000 纳秒(ns) = 1毫秒 (ms)

GetDoubleClickTime

性能: 396.2 ns

BenchmarkDotNet v0.14.0, Windows 11 (10.0.22631.4391/23H2/2023Update/SunValley3)
13th Gen Intel Core i7-13700K, 1 CPU, 24 logical and 16 physical cores
.NET SDK 9.0.100
[Host] : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX2
DefaultJob : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX2

Method Mean Error StdDev
Test 396.2 ns 14.32 ns 41.53 ns

测试代码如下

public class GetDoubleClickTimeTest
{[Benchmark]public void Test(){_ = GetDoubleClickTime();}public const string LibraryName = "user32";/// <summary>/// 获取鼠标双击事件两次点击的时间间隔/// </summary>/// <returns></returns>[DllImport(LibraryName)]public static extern uint GetDoubleClickTime();
}

以上代码放在 github 和 gitee 上,可以使用如下命令行拉取代码。我整个代码仓库比较庞大,使用以下命令行可以进行部分拉取,拉取速度比较快

先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码

git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin 02ae29a86adb257c285046fc1e27a5539cf8bbb3

以上使用的是国内的 gitee 的源,如果 gitee 不能访问,请替换为 github 的源。请在命令行继续输入以下代码,将 gitee 源换成 github 源进行拉取代码。如果依然拉取不到代码,可以发邮件向我要代码

git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
git pull origin 02ae29a86adb257c285046fc1e27a5539cf8bbb3

获取代码之后,进入 Workbench/CofacelceawurDemharawjo 文件夹,即可获取到源代码

GetSystemMetrics

测试内容: 测试获取双击尺寸范围,双击的误差范围

性能:30.09 ns

BenchmarkDotNet v0.14.0, Windows 11 (10.0.22631.4391/23H2/2023Update/SunValley3)
13th Gen Intel Core i7-13700K, 1 CPU, 24 logical and 16 physical cores
.NET SDK 9.0.100
[Host] : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX2
DefaultJob : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX2

Method Mean Error StdDev
Test 30.09 ns 0.035 ns 0.031 ns

测试代码:

public class GetSystemMetricsTest
{[Benchmark]public (int X, int Y) Test(){var x = GetSystemMetrics(SystemMetric.SM_CXDOUBLECLK);var y = GetSystemMetrics(SystemMetric.SM_CYDOUBLECLK);return (x, y);}public const string LibraryName = "user32";/// <summary>/// 获取系统度量值/// </summary>/// <param name="smIndex"></param>/// <returns></returns>[DllImport(LibraryName)]private static extern int GetSystemMetrics(SystemMetric smIndex);internal enum SystemMetric{SM_CXDOUBLECLK = 36, // 0x24SM_CYDOUBLECLK = 37, // 0x25}
}

以上代码放在 github 和 gitee 上,可以使用如下命令行拉取代码。我整个代码仓库比较庞大,使用以下命令行可以进行部分拉取,拉取速度比较快

先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码

git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin 02ae29a86adb257c285046fc1e27a5539cf8bbb3

以上使用的是国内的 gitee 的源,如果 gitee 不能访问,请替换为 github 的源。请在命令行继续输入以下代码,将 gitee 源换成 github 源进行拉取代码。如果依然拉取不到代码,可以发邮件向我要代码

git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
git pull origin 02ae29a86adb257c285046fc1e27a5539cf8bbb3

获取代码之后,进入 Workbench/CofacelceawurDemharawjo 文件夹,即可获取到源代码

相关博客

更多技术博客,请参阅 博客导航

dotnet C# 在不同的机器 CPU 型号上的基准性能测试

C# 标准性能测试

C# 标准性能测试高级用法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/869970.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

洞悉图数据库:构建未来的基石

代码无法创建多段文本或复杂格式内容在实际情况下你可能会利用多行样式设置图像和链接来增强一个网站页面但…………HTML</no value> 代码无法创建多段文本或复杂格式内容。在实际情况下,你可能会利用多行、样式设置、图像和链接来增强一个网站页面,但我能给你提供关于…

在外漂泊的这几年总结和感悟,展望未来

大家好,我加入博客园已经七年了。我是在2017年参加国内第一份全职实习时创建了博客园账号,读了求救信,并最近并办理了园子会员。希望博客园越来越好!最后想说一句:“其他er 和 .NETer,大家不要再打了,一起合作,共同拯救园子吧!” 在国内的日子 我在2017年至2018年国内…

使用python实现tcp通信

TCP协议使服务器和客户端通过socket进行通信服务器端通信流程如下: 1.使用socket类创建一个套接字对象 2.使用bind(ip,port)方法绑定IP地址和端口号 3.使用listen()方法开始TCP监听 4.使用accept0方法等待客户端的连接 5.使用recv0/send0方法接收/发送数据 6.使用close0关闭套…

使用python实现tcp一次通信

TCP协议使服务器和客户端通过socket进行通信服务器端通信流程如下: 1.使用socket类创建一个套接字对象 2.使用bind(ip,port)方法绑定IP地址和端口号 3.使用listen()方法开始TCP监听 4.使用accept0方法等待客户端的连接 5.使用recv0/send0方法接收/发送数据 6.使用close0关闭套…

树莓派Linux安装usb摄像头/打印机

设备HP IR Camara USB\VID_04F2&PID_B634&REV_0012&MI_02 HP Wide Vision FHD Camera USB\VID_04F2&PID_B634&REV_0012&MI_00 USB小票机 USB\VID_0471&PID_0055&REV_0100lsusb 命令列出设备 插入设备前 alex@raspberrypi:~ $ lsusb Bus 002 De…

How to fix Raspberry Pi 中使用 Vim 显示 UTF-8 字符 Emoji 中文乱码 bug All In One

How to fix Raspberry Pi 中使用 Vim 显示 UTF-8 字符 Emoji 中文乱码 bug All In OneHow to fix Raspberry Pi 中使用 Vim 显示 UTF-8 字符 Emoji 中文乱码 bug All In One errorssolutions $ cat /etc/locale.gen$ sudo vim /etc/locale.gen # 1. 开启 zh_CN.UTF-8 UTF-8, 即…

ciscn_2019_ne_5

先让我们输入s1,如果不是administrator程序将退出。 然后输入1会让我们输入src(限制读入128个字符)输入2会展示我们输入的src,输入3有个system 输入4会将src拷贝到dest里面,注意到strcpy没有限制,而dest离ebp为0x48,而src最多可以输入128.所以我们可以利用这个进行栈溢出…

基于Retinex算法的图像去雾matlab仿真

1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频)%卷积滤波 R_conv3 = imfilter(Img1_RN,e,conv, replicate); % 对红色分量进行第三次卷积滤波 G_conv3 = imfilter(Img1_RG,e,conv,…

机器学习吃瓜教程task1

机器学习机器学习三观假设空间和版本空间 训练集可以有多个假设空间,且在不同的假设空间中都有可能学得能够拟合训练集的模型,我们将所有能够拟合训练集的模型构成的集合称为"版本空间"。 基本术语 ...... 模型:机器学习的一般流程如下:首先收集若干样本(假设此…

猴子也能学会的stm32配置

你是一个马喽,你想要用STM32驱动外设/实现功能步骤 1. 打开【CubeMX】 1.1 配置GPIO 1.1.1 如果要配置输入引脚选择上拉电阻和下拉电阻在电路中的作用主要是用于稳定电平和防止浮空,以确保电路在不同情况下能够正常工作。具体来说,它们的作用如下: 作用:确定电平状态:在没…

ciscn_2019_en_2 1

打开ida记得绕过加密,因为它会改变s里面的值exp from pwn import * from LibcSearcher import * context(os=linux, arch=amd64) context.log_level=debug io=remote(node5.buuoj.cn,26931) elf = ELF(./ciscn_2019_en_2) io.sendline(b1) main = elf.sym[main] puts_plt = el…