【发布时间】:2014-06-10 19:13:29
【问题描述】:
我有一个在 IIS 中运行的 ASP.NET 站点,我注意到如果一个页面很慢,它似乎运行速度很慢,所以我设置了一个测试来查看它是否像单线程一样运行(即,如果一页请求正在运行,所有其他请求都必须等待)。我创建了一个非常简单的页面(没有母版页,只有默认的 aspx 代码,除了我添加了一个 Literal 来转储调试代码),其中的代码读取当前时间,休眠 10 秒,然后退出,如下所示:
protected void Page_Load(object sender, EventArgs e)
{
DateTime now = DateTime.Now;
System.Threading.Thread.Sleep(10000);
Literal1.Text = now.ToShortDateString() + " " + now.ToShortTimeString() + " " + now.Second + ":" + now.Millisecond;
}
然后我同时在两个不同的选项卡中打开该页面。每个选项卡上的时间戳几乎正好相隔 10 秒,这在我看来意味着第二个页面请求被阻止并等待第一个页面请求完成后再运行。
我尝试注释掉 web.config 中的所有 http 模块并禁用 Global.asax 中的所有代码,但我仍然看到这个问题。
【问题讨论】:
-
您使用的是哪个版本的 IIS?您可能希望确保未打开服务器端调试,如下所述:stackoverflow.com/questions/587420/…
-
尝试禁用会话状态。可能存在会话锁定。尝试不同的浏览器有什么不同吗?
-
你不会在开发服务器上尝试这个,对吧?因为该服务器可能是单线程的,但 IIS 不是。
-
您是否尝试过使用两种不同的网络浏览器而不是标签?您的浏览器可能会共享连接,因此在发送下一个请求之前等待响应。
-
Alex,我正在使用 Visual Studio,但项目设置为使用 IIS,而不是内置 Web 服务器。
标签: c# asp.net multithreading