gpt4 book ai didi

process - 为什么通过 AppleScript 检索最前面的进程需要这么长时间?

转载 作者:行者123 更新时间:2023-12-02 05:09:49 24 4
gpt4 key购买 nike

我最近写了一个名为 WindowTiler 的实用程序它使用全局快捷方式在当前聚焦的窗口中移动。我通过 AppleScript 在窗口中四处移动,并使用以下脚本获取聚焦窗口的边界:

tell application "System Events"
set appName to the first process whose frontmost is true
set appWindow to the value of attribute "AXFocusedWindow" of appName
set {w, h} to the size of appWindow
set {x, y} to the position of appWindow
set appBounds to {x, y, x + w, y + h}
end tell
{bounds:appBounds}

随着时间的推移,我意识到我的应用如果一段时间不使用, react 会很慢。在集中测量时间性能后,我发现显示的 AppleScript 的 second line 是响应缓慢的原因。有时脚本需要一整秒才能执行(在 SSD 上,据我所知,在 HDD 上更糟糕)。

我不知道为什么 AppleScript 需要这么长时间来简单地查找最前面的进程——应该是对进程管理器的唯一请求。也许您知道为什么它这么慢和/或可以告诉我一种使脚本更快的方法。

PS:当我创建我的应用程序(“存档”)时,我将 Xcode 配置为预编译我的 AppleScripts。编译后的脚本是只读的。

最佳答案

在接收基于 Carbon 的事件热键时,我还没有看到这种延迟。您是否在代码中添加了日志记录以查看何时调用了热键回调?这实际上需要几秒钟,还是您可能需要几秒钟来处理它?<​​/p>

看看DDHotKey有关如何做好此操作的示例(或者您可能只想使用 Dave's 代码来替换您的代码)。

编辑

如果您在程序运行一段时间后遇到问题,您可能还想通过 Instruments 运行它。确保您没有泄漏大量内存或线程。这可能会产生您所描述的症状。

EDIT2

为什么不加载脚本并将其保存在 ivar 或静态文件中,而不是按需加载?即使已编译,您仍然需要从磁盘读取它、解析它并构建数据结构。 (此外,这个问题已经偏离了它的主题。你应该关闭它并开始一个关于 Applescript 性能的新问题。否则它会搞砸那些稍后正在寻找答案的人。)

关于process - 为什么通过 AppleScript 检索最前面的进程需要这么长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6883667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com