【问题标题】:ASP.Net Page runs slow at first time If i used System.Web.Ui NamespaceASP.Net 页面第一次运行缓慢如果我使用 System.Web.Ui 命名空间
【发布时间】:2025-11-30 14:45:01
【问题描述】:

我有一个使用 C# 用 ASP.Net Web Form 4.0 编写的 Web 应用程序,生产机器是带有 IIS 8.5.9600.16384 和 SQL server 2014 的 windows server 2012 R2。

应用程序中的每个页面运行速度都很快,但是任何使用命名空间 system.Web.Ui 的页面我第一次打开它时需要将近 2 分钟,然后我可以快速打开任何页面而没有问题,如果没有人打开此页面将近 25 分钟问题会再次出现,我需要再等 2 分钟才能再次打开它。

注意:这个问题只在生产机器上我没有在开发机器上,在开发机器上一切都很好。问题只是当我使用命名空间 system.Web.Ui应用程序页面或整个应用程序。

我尝试在应用程序池中将空闲时间设置为 0,就像这个例子 Set idle time out example,在几个小时内一切都会好起来,但如果没有人使用该站点,1 天后问题就会返回。

请帮助诊断和解决这个问题。

前端代码:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication2.WebForm1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
    <h3>TestPage</h3>
</asp:Content>

后端代码:

   using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication2
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            ScriptManager.RegisterClientScriptBlock(this,this.GetType(),"AlertBox","Alert('Hello World');",true);
        }
    }
}

【问题讨论】:

  • 页面加载事件的代码是什么?除了这个,我还能看到一个ScriptManager.RegisterClientScriptBlock
  • 这是代码:ScriptManager.RegisterClientScriptBlock(this,this.GetType(),"AlertBox","Alert('Hello World');",true);它只是显示警告框。
  • 当您在浏览器上写入ScriptManager.RegisterClientScriptBlock 时,它会为此添加多少脚本文件。为什么有人喜欢这样做。如果可能的话,把它放在你页面上的java脚本中。
  • 根据您的描述,问题出在您的 Web 服务器而不是 Web 应用程序上。一般来说,asp.net web 应用程序的网页在第一次运行时比在随后的请求中慢。延迟取决于许多因素,包括在 Page_Load 事件上执行的代码。由于您似乎没有这样的代码,并且您没有在页面启动时加载任何特殊的东西,例如 IoC 容器或实体框架,那么您真正应该研究的是 IIS 的配置方式。我很确定 System.Web.UI 和 JavaScript 注册不应该受到责备。
  • 您的应用程序是否连接到数据库或类似的东西?

标签: c# asp.net webforms


【解决方案1】:

您可以简单地在网页中使用 JavaScript 警报而不是 WebForm。

alert("Your Message");

【讨论】:

  • 我的问题不是警报,我的问题是 NameSpace System.Web.UI,当我在应用程序上使用它时,我需要这个带有 Gridviewbinder 的命名空间,而不仅仅是警报。