PerfView 在线程耗尽期间显示数千个随机 FileOpenOrCreate

问题描述

有谁知道为什么我会收到数千次调用 FileOpenorCreate 以使用 PerfView 和集合的进程/文件/注册表堆栈部分来查找随机 .cshtml 和 .vbhtml 文件的原因?

enter image description here

解决方法

如果您只花一点时间在源代码上(但不清楚如何定位源文件),您可以看到 ASP.NET 运行时 (WebPageRoute) 正在尝试将请求路径映射到文件系统路径,

https://github.com/aspnet/AspNetWebStack/blob/42991b3d2537b702736463f76a10a4fcf2ea44c9/src/System.Web.WebPages/WebPageRoute.cs#L35

在该过程中,它利用了 MapPathBasedVirtualPathProvider 中的缓存,

https://referencesource.microsoft.com/#System.Web/Hosting/MapPathBasedVirtualPathProvider.cs,78

PerfView 记录的文件系统访问与构建此类缓存的行为相匹配,因此似乎没有任何问题。