【问题标题】:Is it possible to determine the source of a Soft Page Fault in C#?是否可以在 C# 中确定软页面错误的来源?
【发布时间】:2024-05-23 20:45:02
【问题描述】:

我观察到我的 .NET 应用程序中偶尔出现软页面错误。这很令人惊讶,因为我将其设计为不会在稳定状态下产生页面错误。

出于兴趣,是否可以检查我的程序(或 .NET 框架)的哪个部分在发生这些软页面错误时生成它们?

是否可以计算出在哪个堆或堆栈上生成了软页面错误,即线程 1、2、3 的堆栈或 gen0、gen1、gen2、大对象等的堆?

更新

决定不为软页面错误而烦恼。对于 99.9% 的普通应用程序,这根本不会影响性能。

【问题讨论】:

    标签: c# .net visual-studio-2010 .net-4.0


    【解决方案1】:

    Do you really need to bother about this?

    如果页面错误阻止执行,您应该能够分析应用程序以找到执行时间最长的部分。如果他们没有阻止执行,那么对你有好处......

    【讨论】:

    • 是的,因为 .NET 框架存在一个小问题:在套接字上使用 BeginReceiveAsync 时,任何页面错误都会将传入的 UDP 数据包延迟数百微秒(与锁定驱动程序有关防止发生页面错误,从而阻止所有其他线程执行)。这会增加,严重影响应用程序吞吐量。我们可以在 VS2012 profiler 中看到这种效果,并且想知道程序(或 .NET 框架)的哪个部分产生了页面错误。