我注意到,重复相同的分析几次会大大减少完成所需的时间。 在我的情况下,第一次运行需要1700ms的一代在重复几次后只需要200ms。
我猜分析器或底层的SAT解算器正在跟踪以前的分析,而且在大多数情况下肯定都是好的。
但目前我希望有一个或多或少不变的完成时间。所以我的问题是:
(TL; DR) 有没有办法清空Analyzer"缓存" (重新启动分析仪除外)?
编辑
我刚刚完成了我的这个模型的几次运行,这就是我得到的:
运行#1: 113309 vars。 3023主要变种。 298922条款。的 1964ms
运行#2: 113309 vars。 3023主要变种。 298922条款。的 1081ms
运行#3: 113309 vars。 3023主要变种。 298922条款。的 514ms
运行#4: 113309 vars。 3023主要变种。 298922条款。的 380ms
运行#5: 113309 vars。 3023主要变种。 298922条款。的 342ms
运行#6: 113309 vars。 3023主要变种。 298922条款。的 438ms
答案 0 :(得分:2)
我多次注意到同样的行为,而且我从未确定过为什么会这样。据我所知,Alloy Analyzer和Kodkod都没有任何类型的显式缓存(当然,在单个翻译/执行中使用了缓存,但我不认为它们是在执行之间进行的)。
我的简单解释是第一个"慢"运行是由于"冷启动"。一个论点是,如果你打开两个不相关的Alloy模型,并且首先从第一个模型执行命令,然后从第二个模型执行命令,第二个执行(根据我的经验)仍然运行"更快&#34 ;比从冷启动执行相同的命令。