【问题标题】:My C# application is intermittently hanging when running on localhost在 localhost 上运行时,我的 C# 应用程序间歇性挂起
【发布时间】:2016-06-14 15:34:19
【问题描述】:

有没有好心人有时间帮我弄清楚为什么我的应用程序会间歇性挂起(并希望如何解决它)?我正在从 VS2015 运行一个访问 SQL Server 数据库的 Web 程序。有时我会单击网页上的链接,一切正常。然而,其他时候,小圆圈永远旋转,永远不会回来。它似乎与数据库无关,因为有一次我在调用XmlSerializer serializer = new XmlSerializer(type);时发现它挂起

我在 Windows 10 笔记本电脑(16GB 和大量磁盘)的 localhost 上的 IIS Express 中运行该网站。如果有人认为可以帮助我诊断问题,我也有 ReSharper。我已经为此奋斗了好几天,不知道还能做什么,但希望这里的人会同情我。

Re: D Stanley 的 cmets:“你有任何日志吗?你能在调试器中运行它以查看它挂在哪里吗?系统事件日志中有任何内容吗?”

有日志记录,但仅限于捕获的异常。没有什么可以帮助挂起情况。我可以在调试器中运行它,但是当它挂起时,我看不到它挂在哪里(它在外部代码中)。当我运行程序时,事件日志确实报告了“perflib”错误。如果您认为有帮助,我可以发布该信息。

更多信息。我安装了提琴手。应用程序挂起时,Fiddler 仍在进城。它显示的“进程”是“scriptedsandbox64”,它正在执行 I/O 并消耗 CPU 时间。

【问题讨论】:

  • 你有日志吗?您可以在调试器中运行它以查看它挂在哪里吗?系统事件日志中是否有任何内容? (添加问题的答案,而不是在 cmets 中)
  • 这不是真的“圆圈永远旋转,永远不会回来”,或者更确切地说,这是可疑的。通常,Web 请求应该在服务器上超时(并向客户端返回 5xx)或在客户端超时。我建议你在客户端(Fiddler、Burp)配置一个代理,看看客户端和服务器之间到底发生了什么。
  • 好的,从技术上讲,它永远不会在我给它的时间内回来(有时超过一个小时)。怕是不知道怎么配置代理,有指针吗?
  • 如果在 web.config 中将 debug 设置为 true,则请求不会超时。尝试将调试更改为 false 以允许请求超时。从异常中,查看堆栈跟踪是否为您提供了更好的信息。

标签: c# localhost freeze


【解决方案1】:

我建议您在代码中添加更多日志消息,例如:

DateTime.Now.ToString("o") "Starting xxx"
DateTime.Now.ToString("o") "Finished xxx"

其中 xxx 是某段代码的名称。您怀疑问题出在外部代码中,因此请封装所有这些调用。

然后您可以看到应用程序在哪里花费了过多的时间。找到正确的区域后,也许可以添加更多日志记录以专注于问题。

【讨论】:

  • 这是一个非常大的应用程序,我真的不知道它都挂在哪里(它似乎在不同的地方)。我认为在各处随意添加日志记录是徒劳的。
  • 更徒劳的只是在没有任何代码或不知道程序挂起的位置的情况下推测哪里可能存在错误。
【解决方案2】:

我的挂起问题的答案是使用本地 IIS 而不是 IIS Express。一旦我弄清楚如何为 localhost 设置网站并开始使用本地 IIS 运行,我的挂起就消失了。

【讨论】:

    猜你喜欢
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 2012-03-23
    • 1970-01-01
    相关资源
    最近更新 更多