自动缓存C#模块,首次加载时节省编译时间。

功能建议 · 36 次浏览
Anlv 创建于 20小时24分钟前

通过获取 `quicker_in_param` 传递的参数,为 `qk_compile_mode` 时直接返回 return;

可以实现只编译而不运行

public static void Exec(IStepContext context)
{
    if ((context.GetVarValue("quicker_in_param") as string) == "qk_compile_mode")
        return;
    ...省略
// 这个示例是通过传递参数  `qk_compile_mode`  激活 C# 模块,此时会编译,但返回 return 而不执行具体功能。

我在想,动作作者可以通过传递特定参数,只缓存而不执行,那么这个功能是否可以加到动作模块中,或者Quicker设置中?

譬如,在 Quicker 启动后自动缓存,在首次激活带C#模块的动作时就比较无感了。

另一个讨论贴 https://getquicker.net/Common/Topics/ViewTopic/33741

Anlv 最后更新于 2026/4/18

回复内容
CL 18小时14分钟前
#1

这里的缓存实际是将dll保存下来的意思,从而下次运行的时候可以比较快,以及在重启quicker之后可以跳过编译步骤,提高首次加载速度。

你说的可能是“预热”的意思,就是加载一遍c#代码但是不执行?

现在这个在第一次启动后,下次加和不加截图里的预热步骤,有多少性能上的区别呢?

Anlv 回复 CL 17小时57分钟前 :

是重启Quicker后跳过编译的意思;
有些1000行左右的C#模块,首次执行可能需要3~5秒等待,如果把这个加载过程放在Quicker启动后,当用户真正需要使用动作时就可以快速调用,跳过编译。

(现在的方法是另外制作一个动作,放到"自动运行动作"→启动后运行,传递 qk_compile_mode 去执行动作,让他去编译)

Anlv 最后更新于 17小时56分钟前
CL 回复 Anlv 15小时31分钟前 :
每次启动qk第一次运行都会这么久么?理论上缓存dll之后,即便重启也不会重新编译,加载dll应该用不了这么久。难道有bug?
Anlv 回复 CL 15小时22分钟前 :

印象中是每次开机的第一次会比较久,我比较常用的一个AN录屏和短语补齐都是这种情况。

Anlv 回复 Anlv 15小时19分钟前 :

另外我发现使用JavaScript模块的动作也是,在开启电脑后的第一次使用会有大概1.5秒的冷启动时间。后面再用就是10毫秒左右就跑完了。

回复主贴