ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

测量运行1段AutoHotkey脚本代码所需消耗的时间

2022-02-10 15:34:36  阅读:290  来源: 互联网

标签:AutoHotkey CounterAfter CounterBefore 代码 消耗 QueryPerformanceCounter Int64 DllCal



今天(2022-2-10),我在用yinxiang.com印象笔记、iCodeRepository爱码仓库和FileLocatorPro全文检索工具软件这3个工具搜索AutoHotkey脚本代码时发现了一些我从因特网(互联网)上下载的一些测量运行1段AutoHotkey脚本代码所需消耗的时间的脚本代码,我现在复制粘贴出来供广大网友阅读、分享、下载、测试、分类、整理、收藏和运行。

; 代码1:异步执行(我的古董电脑上测试所需消耗的时间大约是3700毫秒左右):
DllCall("QueryPerformanceCounter","Int64*",CounterBefore)
SetBatchLines -1
Gosub 异步执行
; 下面这个Loop循环会阻塞线程,但异步执行仍然可以工作
Loop {
Sleep 10
ToolTip 主线程持续运算演示-%A_Index%
} Return
异步执行:
Run Notepad,, Min, PID
; 这步等效于 WinWait 【等待直到指定的窗口存在】
异步执行2:
if WinExist("ahk_pid " PID)
Goto 异步执行3
SetTimer 异步执行2, -10
Return
; 这步等效于 Sleep 3000 【延时3秒】,后台往记事本里写入"Sleep 3000 WinActivate",并在3秒后激活记事本窗口
异步执行3:
ControlSend, Edit1, "Sleep 3000 WinActivate", ahk_pid %PID%
SetTimer 异步执行4, -3000
Return
异步执行4:
WinActivate, ahk_pid %PID%
DllCall("QueryPerformanceCounter","Int64*",CounterAfter)
MsgBox % "Elapsed QPC time is " . Round((CounterAfter - CounterBefore)/10000,0)
Return

/*
;;; 精确计时到毫秒
DllCall("QueryPerformanceFrequency","Int64*",QuadPart)
DllCall("QueryPerformanceCounter","Int64*",CounterBefore)
Sleep 1000
DllCall("QueryPerformanceCounter","Int64*",CounterAfter)
;;; MsgBox % "Elapsed QPC time is " . Round((CounterAfter - CounterBefore)/QuadPart,0)
MsgBox % "Elapsed QPC time is " . Round((CounterAfter - CounterBefore)/10000,0)
return
*/
; ===== End =============================================

 

; 代码2:伪并发执行(我的古董电脑上测试所需消耗的时间大约是400毫秒左右):
global CounterBefore
DllCall("QueryPerformanceCounter","Int64*",CounterBefore)
#SingleInstance, force
#Persistent
; RunWith("admin")
DetectHiddenWindows,On
SetTitleMatchMode,2
global isSended
isSended := false
SetBatchLines -1
SetTimer 伪并发执行,1
; 下面这个Loop循环会阻塞线程,但伪并发执行仍然可以工作
; 在类似MsgBox等语句执行期间会中止部分线程
; 如需并发执行多项任务可以把各项任务分别写入各自专用的AutoHotkey脚本文件中
; 然后再统一调用执行AutoHotkey脚本文件,让操作系统并发执行不同的多项任务
loop {
Sleep 10
ToolTip 主线程持续运算演示-%A_Index%
} Return
;
伪并发执行()
{
global PID
Process,Exist,Notepad.exe
if (%ErrorLevel%=0)
{
Run Notepad,, Min, OutputVarPID
PID=%OutputVarPID%
}
; MsgBox,PID %PID%
WinGet, WinID, ID,ahk_pid %PID%
DllCall("SwitchToThisWindow", "UInt", WinID, "UInt", 1)
IfWinActive,ahk_pid %PID%
{
if (not(isSended))
{
ControlSetText, Edit1, "Sleep 3000 WinActivate", ahk_pid %PID%
isSended := true
}
}
IfWinActive,ahk_pid %PID%
{
; WinActivate, ahk_pid %PID%
SetTimer 伪并发执行,Delete
DllCall("QueryPerformanceCounter","Int64*",CounterAfter)
MsgBox % "Elapsed QPC time is " . Round((CounterAfter - CounterBefore)/10000,0)
ExitApp
}
; }
}

/*
;;; 精确计时到毫秒
DllCall("QueryPerformanceFrequency","Int64*",QuadPart)
DllCall("QueryPerformanceCounter","Int64*",CounterBefore)
Sleep 1000
DllCall("QueryPerformanceCounter","Int64*",CounterAfter)
;;; MsgBox % "Elapsed QPC time is " . Round((CounterAfter - CounterBefore)/QuadPart,0)
MsgBox % "Elapsed QPC time is " . Round((CounterAfter - CounterBefore)/10000,0)
return
*/
; ===== End =============================================

; 代码3:Send语句执行50次消耗的时间(我的古董电脑上测试所需消耗的时间是800毫秒):
global CounterBefore
DllCall("QueryPerformanceCounter","Int64*",CounterBefore)
#SingleInstance, force
#Persistent
; RunWith("admin")
DetectHiddenWindows,On
SetTitleMatchMode,2
; ==================================================
loop,50
{
Send,1
}
; ==================================================
DllCall("QueryPerformanceCounter","Int64*",CounterAfter)
MsgBox % "执行此段AutoHotkey代码消耗了" . Round((CounterAfter - CounterBefore)/10000,0) . "毫秒"
ExitApp

/*
;;; 精确计时到毫秒
DllCall("QueryPerformanceFrequency","Int64*",QuadPart)
DllCall("QueryPerformanceCounter","Int64*",CounterBefore)
Sleep 1000
DllCall("QueryPerformanceCounter","Int64*",CounterAfter)
;;; MsgBox % "Elapsed QPC time is " . Round((CounterAfter - CounterBefore)/QuadPart,0)
MsgBox % "Elapsed QPC time is " . Round((CounterAfter - CounterBefore)/10000,0)
return
*/
; ===== End =============================================

; 代码4:ToolTip语句执行50次消耗的时间(我的古董电脑上测试所需消耗的时间是50毫秒):
; 添加了 SetBatchLines -1 语句之后此脚本执行的明显快了许多,没有出现大于50毫秒的情况
SetBatchLines -1
global CounterBefore
DllCall("QueryPerformanceCounter","Int64*",CounterBefore)
#SingleInstance, force
#Persistent
; RunWith("admin")
DetectHiddenWindows,On
SetTitleMatchMode,2
; ==================================================
loop,50
{
ToolTip,1
}
; ==================================================
DllCall("QueryPerformanceCounter","Int64*",CounterAfter)
MsgBox % "执行此段AutoHotkey代码消耗了" . Round((CounterAfter - CounterBefore)/10000,0) . "毫秒"
ExitApp

/*
;;; 精确计时到毫秒
DllCall("QueryPerformanceFrequency","Int64*",QuadPart)
DllCall("QueryPerformanceCounter","Int64*",CounterBefore)
Sleep 1000
DllCall("QueryPerformanceCounter","Int64*",CounterAfter)
;;; MsgBox % "Elapsed QPC time is " . Round((CounterAfter - CounterBefore)/QuadPart,0)
MsgBox % "Elapsed QPC time is " . Round((CounterAfter - CounterBefore)/10000,0)
return
*/
; ===== End =============================================

; 代码5:WinActivate语句执行50次消耗的时间(我的古董电脑上测试所需消耗的时间是50毫秒)
; 窗口和控件操作是比较难处理的操作。
SetBatchLines -1
global CounterBefore
DllCall("QueryPerformanceCounter","Int64*",CounterBefore)
#SingleInstance, force
#Persistent
; RunWith("admin")
DetectHiddenWindows,On
SetTitleMatchMode,2
; ==================================================
Run Notepad
loop,50
{
WinActivate,记事本
}
; ==================================================
DllCall("QueryPerformanceCounter","Int64*",CounterAfter)
MsgBox % "执行此段AutoHotkey代码消耗了" . Round((CounterAfter - CounterBefore)/10000,0) . "毫秒"
ExitApp

/*
;;; 精确计时到毫秒
DllCall("QueryPerformanceFrequency","Int64*",QuadPart)
DllCall("QueryPerformanceCounter","Int64*",CounterBefore)
Sleep 1000
DllCall("QueryPerformanceCounter","Int64*",CounterAfter)
;;; MsgBox % "Elapsed QPC time is " . Round((CounterAfter - CounterBefore)/QuadPart,0)
MsgBox % "Elapsed QPC time is " . Round((CounterAfter - CounterBefore)/10000,0)
return
*/
; ===== End =============================================

; 代码6:SwitchToThisWindow语句执行50次消耗的时间(我的古董电脑上测试所需消耗的时间是50毫秒):
SetBatchLines -1
global CounterBefore
DllCall("QueryPerformanceCounter","Int64*",CounterBefore)
#SingleInstance, force
#Persistent
; RunWith("admin")
DetectHiddenWindows,On
SetTitleMatchMode,2
; ==================================================
Run Notepad
loop,50
{
WinGet, WinID, ID,记事本
DllCall("SwitchToThisWindow", "UInt", WinID, "UInt", 1)
}
; ==================================================
DllCall("QueryPerformanceCounter","Int64*",CounterAfter)
MsgBox % "执行此段AutoHotkey代码消耗了" . Round((CounterAfter - CounterBefore)/10000,0) . "毫秒"
ExitApp

/*
;;; 精确计时到毫秒
DllCall("QueryPerformanceFrequency","Int64*",QuadPart)
DllCall("QueryPerformanceCounter","Int64*",CounterBefore)
Sleep 1000
DllCall("QueryPerformanceCounter","Int64*",CounterAfter)
;;; MsgBox % "Elapsed QPC time is " . Round((CounterAfter - CounterBefore)/QuadPart,0)
MsgBox % "Elapsed QPC time is " . Round((CounterAfter - CounterBefore)/10000,0)
return
*/
; ===== End =============================================

; 代码7:WinActivate,ahk_pid语句执行50次消耗的时间(我的古董电脑上测试所需消耗的时间是2000毫秒):
; 为何这段代码执行的如此的慢呢?究竟是为什么呢?有什么改进的方法和建议吗?
SetBatchLines -1
global CounterBefore
DllCall("QueryPerformanceCounter","Int64*",CounterBefore)
#SingleInstance, force
#Persistent
; RunWith("admin")
DetectHiddenWindows,On
SetTitleMatchMode,2
; ==================================================
Run Notepad,, Min, OutputVarPID
loop,50
{
WinActivate,ahk_pid %OutputVarPID%
}
; ==================================================
DllCall("QueryPerformanceCounter","Int64*",CounterAfter)
MsgBox % "执行此段AutoHotkey代码消耗了" . Round((CounterAfter - CounterBefore)/10000,0) . "毫秒"
ExitApp

/*
;;; 精确计时到毫秒
DllCall("QueryPerformanceFrequency","Int64*",QuadPart)
DllCall("QueryPerformanceCounter","Int64*",CounterBefore)
Sleep 1000
DllCall("QueryPerformanceCounter","Int64*",CounterAfter)
;;; MsgBox % "Elapsed QPC time is " . Round((CounterAfter - CounterBefore)/QuadPart,0)
MsgBox % "Elapsed QPC time is " . Round((CounterAfter - CounterBefore)/10000,0)
return
*/
; ===== End =============================================


以上这些AutoHotkey脚本源代码和其他一些文档、表格、图片、音频、视频、电子书、软件、游戏是我在搜索引擎中搜索并发现的,
我平时主要有以下12个常用的搜索引擎:
搜索引擎
1、西瓜视频搜索引擎(可以搜索各种视频教程)
https://www.ixigua.com/
2、优酷视频搜索引擎
https://www.youku.com/
3、腾讯视频搜索引擎
https://v.qq.com/
4、爱奇艺视频搜索引擎
https://www.iqiyi.com/
5、淘宝搜索引擎(可以搜索各种网购物品)
https://www.taobao.com/
6、京东搜索引擎
https://www.jd.com/
7、亚马逊搜索引擎
https://www.amazon.cn/
8、简单搜索引擎
https://www.jsousuo.com/
9、必应搜索引擎
https://cn.bing.com/?ensearch=1
10、360搜索引擎
https://www.so.com/
11、百度搜索引擎
https://www.baidu.com/
12、Yandex搜索引擎
https://yandex.com/


我新建文档、表格或AutoHotkey脚本源代码的一般过程是:
第1步:用腾讯QQ登录腾讯文档并新建在线文档或者新建在线表格。
第2步:编辑新建的在线文档或者在线表格
第3步:把腾讯文档中的文档或表格复制到印象笔记中(由于腾讯文档不支持批量搜索文件正文内容,所以只好啰嗦一点,复杂一点了)。
第4步:测试并修改文档、表格或AutoHotkey脚本。
第5步:发布、发送、打印或备份文档、表格或AutoHotkey脚本。
(我非常喜欢腾讯文档和印象笔记的实时自动保存功能,在线实时自动保存能够有效的防止丢失正在编辑的内容,不用担心误操作、误删误改、电脑死机、突然断电、电脑被盗或者其他意外事件对编辑内容的威胁)。

我管理非办公文件的一般过程是:
第1步:自制或者批量下载文件。
第2步:测试文件是否可用(音乐歌曲有声读物能够播放;视频电影能够播放,最好是国语中字的;程序能够实现功能、长期可用并且没有垃圾广告等副作用;电子书能够打开;游戏能够长期运行)。
第3步:用Total Commander 10.00 分类、筛选、重命名、整理已经测试好的非办公文件。
第4步:用FileZillaPro连接群晖NAS的WebDAV文件服务并批量上传已经测试和整理好的非办公文件到Synology群晖网络存储服务器DS920+的RAID 1 镜像存储池中的共享文件夹之中。
第5步:用QuickConnect登录Synology群晖网络存储服务器DS920+并在“Universal Search”套件中正确设置“索引文件夹列表”,预先建立文件索引,以便今后能够通过文件名或者部分文件正文内容片断快速的找到所需的文件。


https://www.autoahk.com/archives/39825
 
https://blog.51cto.com/ds920/4996987
 
https://www.cnblogs.com/delphixx/p/15879293.html

 

 

 

 

 

 

 

 

标签:AutoHotkey,CounterAfter,CounterBefore,代码,消耗,QueryPerformanceCounter,Int64,DllCal
来源: https://www.cnblogs.com/delphixx/p/15879293.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有