.NET Framework因Fusion发布策略导致加载程序集300ms延迟求助
问题:.NET Framework 4.7.2 WinForms应用JIT加载System.Windows.Forms.dll时出现300ms+延迟
场景与现象
我创建了目标框架为.NET Framework 4.7.2的WinForms新项目,替换Program类代码后,调试时单步进入foo()函数出现超过300ms的延迟。经定位,该延迟由JIT加载System.Windows.Forms.dll触发。
排查结果
通过Process Monitor追踪发现,系统在延迟期间多次尝试加载不存在的文件C:\Windows\assembly\pubpol636.dat,相关调用日志及堆栈跟踪已留存。反编译clr!CPublisherPolicy::LoadBitmaskData函数后确认:该函数会10次尝试加载pubpol策略文件,每次间隔30ms,累计时长与观测到的延迟完全匹配。
当前限制与无效尝试
- .NET Core环境下无此问题,但我需进行多目标框架开发,无法接受该强制延迟。
- 尝试在
App.config中配置publisher policy,未解决问题。 - 暂未明确为何仅
System.Windows.Forms.dll触发该文件加载路径,但后续测试证实所有.NET Framework应用均存在此问题。
临时解决方案
- 创建空的
pubpol636.dat文件可临时绕过延迟,但并非合理的长期方案。 - 删除注册表项
HKLM\SOFTWARE\Microsoft\Fusion\PublisherPolicy\Default下的Latest值,可彻底消除该延迟。
需求
寻求该问题的根源以及合理的长期解决方案。
内容的提问来源于stack exchange,提问作者lordmilko
相关产品推荐
相关产品推荐

