Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在一个非常非传统的C#ASP.NET web表单应用程序中减少页面加载时间?_C#_Asp.net_.net_Performance_Webforms - Fatal编程技术网

如何在一个非常非传统的C#ASP.NET web表单应用程序中减少页面加载时间?

如何在一个非常非传统的C#ASP.NET web表单应用程序中减少页面加载时间?,c#,asp.net,.net,performance,webforms,C#,Asp.net,.net,Performance,Webforms,(我已经解决这个问题6个月了,所以如果这个问题有任何地方不符合Stack Overflow的指导原则,请原谅我。不过我很确定我没事。我知道这可能太模糊了,我只是不确定。) 长话短说:我的任务是改进2001年开发的asp.net web应用程序的绝对优势。最初的程序员没有使用单个ASP html对象,而是选择通过Response.Write()打印所有html、javascript和css。所有的.aspx页面实际上都是空白的——所有的事情都是在aspx.cs中完成的 下面是一个我正在使用的示例,

(我已经解决这个问题6个月了,所以如果这个问题有任何地方不符合Stack Overflow的指导原则,请原谅我。不过我很确定我没事。我知道这可能太模糊了,我只是不确定。)

长话短说:我的任务是改进2001年开发的asp.net web应用程序的绝对优势。最初的程序员没有使用单个ASP html对象,而是选择通过Response.Write()打印所有html、javascript和css。所有的.aspx页面实际上都是空白的——所有的事情都是在aspx.cs中完成的

下面是一个我正在使用的示例,以及90%的代码隐藏是什么样子的:

if (Common.IsSuperuser())
{
Response.Write("<div style=\"float:left;padding:5px 5px 5px 25px;\">");
Response.Write("<form action=\"users.aspx?id=" + strUserID + "&siteid=" + thisSite._siteGUID + "\" method=\"post\" style=\"display:inline;\">");
Response.Write("<input type=\"hidden\" name=\"isClearEmpty\" value=\"true\" />");
Response.Write("<input type=\"submit\" name=\"clearEmptyAccounts\" value=\"Clear Empty Users\" />");
Response.Write("</form>");
Response.Write("</div>");
}
if(Common.issupurer())
{
回答。写(“”);
回答。写(“”);
回答。写(“”);
回答。写(“”);
回答。写(“”);
回答。写(“”);
}
请结束我

主要目标之一是减少页面加载时间,目前页面加载时间为4到8秒。但是,当我在page_load()函数的“{”和“}”处设置两个断点时,对于任何给定的.aspx页面,它们之间的时间间隔仅为475ms。其他3500-7500ms来自哪里

根据Chrome的控制台,这段时间只花在等待服务器上。我们在一台服务器上托管了几十个web应用商店(50+),每个商店在其自己的目录中都是自己的ASP.NET应用程序,而且每个商店的管理组件在其各自的商店目录中也是自己的ASP.NET应用程序。每个商店/管理员组合也有自己的Microsoft Access(是的,您读得对)数据库。坦率地说,这是疯狂的

更重要的是,实际的存储应用程序加载得很好,但管理端应用程序的加载时间总是超过5s。在管理应用程序中,我们也经常收到明文响应“服务器太忙”,但在客户端存储中却从未收到过。(字面上没有其他信息,只是一个空白的白色HTML页面,上面写着“服务器太忙”)

我们的商店由第三方托管在一个虚拟的半私有服务器上,所以现在让我们排除服务器设置和硬件,因为我没有能力更改这些内容。我只是想知道,在我从头重写整个过程的同时,在应用程序本身的范围内,是否有什么可以做的,以减轻管理员的沮丧

如果有什么可以推荐的,太好了,我会试试看。如果我无法控制服务器设置,或者这个问题含糊不清(对不起,我没有更多的信息要说),这也没关系


谢谢大家抽出时间

对此我不是很确定,但我会尝试将html标记添加到StringBuilder对象并调用响应。只需使用StringBuilder对象的内容编写一次。。。我可以想象这可能会导致问题。

对此我不是很确定,但我会尝试将html标记添加到StringBuilder对象并调用响应。只使用StringBuilder对象的内容编写一次。。。我可以想象,这可能会导致问题。

Microsoft Access数据库的设计不适合扩展。例如,它的最大用户数(理论上)为255个,但微软的建议是将其限制为10个用户。是的,十个

等待时间可能与线程在等待释放访问资源时阻塞有关。因此,第1步,将其迁移到SQL Server或其他专为企业使用而设计的数据库解决方案

Microsoft Jet有一个读缓存,该缓存每PageTimeout毫秒更新一次(默认值为5000ms=5秒)。它还有一个延迟写入机制,在一个单独的线程上操作到主处理,从而将更改异步写入磁盘。这两种机制有助于提高性能,但在某些需要高并发性的情况下,它们可能会产生问题

Jet最多可以支持255个并发用户,但基于文件的体系结构的性能可能会阻止许多并发用户使用它。一般来说,对于10个或更少的并发用户,最好使用Jet。


文章:

Microsoft Access数据库的设计不适合扩展。例如,它的最大用户数(理论上)为255个,但微软的建议是将其限制为10个用户。是的,十个

等待时间可能与线程在等待释放访问资源时阻塞有关。因此,第1步,将其迁移到SQL Server或其他专为企业使用而设计的数据库解决方案

Microsoft Jet有一个读缓存,该缓存每PageTimeout毫秒更新一次(默认值为5000ms=5秒)。它还有一个延迟写入机制,在一个单独的线程上操作到主处理,从而将更改异步写入磁盘。这两种机制有助于提高性能,但在某些需要高并发性的情况下,它们可能会产生问题

Jet最多可以支持255个并发用户,但基于文件的体系结构的性能可能会阻止许多并发用户使用它。一般来说,对于10个或更少的并发用户,最好使用Jet。

文章:

为FireBug或PageSpeed安装它会告诉您速度慢的关键问题

  • 限制您的HTTP请求

  • 最小化、压缩并组合JavaScript和CSS文件

  • 使用CSS精灵

  • 将脚本标记放在页面底部

  • 压缩图像

  • 安装Memcache以进一步减少数据库负载

  • 设置一个单独的域或CDN来服务静态文件

  • 根据我的经验,Access数据库对于4到5个以上的并发用户来说是非常糟糕的尽快迁移到SQLExpress它具有相同的4GB存储限制,但不使用JET engi