这个问题与我关于启用 PGO 的范围的其他问题类似,但这次的范围是指存在优化的二进制代码。
当可执行文件运行时,PGO 会一遍又一遍地重新启动吗?或者当应用程序再次运行时是否会重新使用先前优化的代码? (类似于ngen.exe缓存)
优化是一次性优化还是可以动态适应?例如,如果我们有一个时间跟踪应用程序,每个人都在早上登记入住并特殊退房,但到了晚上,它就会变成每个人都退房而没有人登记入住。它会在白天重新考虑之前的优化版本吗?有什么方法可以触发它重新优化(类似于 SQL Server 中的 FREEPROCCACHE 来摆脱错误的查询计划),例如如果优化不持续,重新启动进程将是显而易见的答案。
启用 PGO(我们称之为内存泄漏垃圾收集器)后,应重新考虑 IIS 应用程序池设置的高级部分中的常规时间间隔设置,具体取决于上述问题的答案(是否持续)。
希望有人能够对这个很酷的黑匣子功能有所启发!
方法的优化决策基于前 N 次调用的观察结果(粗略地说,N = 30,但实际上可能更多)。如果方法的行为在较长的时间跨度内发生变化,那么基于对方法行为的初步观察而做出的决策可能会变得次优。目前没有规定在优化方法产生后对其进行修改。