zoukankan      html  css  js  c++  java
  • 项目从.net 2.0 升级到。.net 4.0项目以后发现网站运行十分缓慢


    大家好,我们团队现在用开发环境是vs2010 .net 2.o framework asp.net, 昨天项目从.net 2.0 升级到。.net 4.0项目以后发现网站运行十分缓慢,页面95%的页面都无打开,即使打开首页也需要好几分钟,经过我们排查只有,发现移除一个附加httpmodel 以后项目就正常运行了,但是我们必须要次httpmodel 功能才正常,否则有部分功能无法使用,通过对应用程序的监控发现在这个httpModel 中有一个事件运行时间超过2~4分钟,请大家帮我分析一下具体产生的原因,请大家不吝指教

    ------------------------------------------------------------------------------

     public class UrlAppendParams : System.Web.IHttpModule
        {
            private long refId = 0;
            private string authCode = string.Empty;
     
            public void Init(HttpApplication application)
            {
                application.PostMapRequestHandler += new EventHandler(Application_PostMapRequestHandler);
                application.AcquireRequestState += new EventHandler(Application_AcquireRequestState);
                application.PostAcquireRequestState += new EventHandler(Application_PostAcquireRequestState);
                application.PostRequestHandlerExecute += new EventHandler(Application_ApplyUrlFilter);
                HttpContext.Current.Trace.Write(MethodInfo.GetCurrentMethod().Name, DateTime.Now.ToLongTimeString());

            } 

             具体出问题的事件方法就是此方法,在asp.net 2.0 的运行环境下正常,在asp.net 4.0 的运行环境运行时时间超过4分钟。

             private void Application_PostMapRequestHandler(object source, EventArgs e)

            {
                HttpContext.Current.Trace.Write(MethodInfo.GetCurrentMethod().Name, DateTime.Now.ToLongTimeString());
                HttpApplication application = (HttpApplication)source;
     
                if (application.Context.Handler is IReadOnlySessionState || application.Context.Handler is IRequiresSessionState)
                {
                    // no need to replace the current handler 
                    return;
                }
     
                // swap the current handler 
                application.Context.Handler = new UrlParamsFilterHttpHandler(application.Context.Handler);

            } 

            。。。。。。。。。。

      public class UrlParamsFilterHttpHandler : IHttpHandler, IRequiresSessionState

        {
            internal readonly IHttpHandler OriginalHandler;
     
            public UrlParamsFilterHttpHandler()
            {
                OriginalHandler = HttpContext.Current.Handler;
                HttpContext.Current.Trace.Write(MethodInfo.GetCurrentMethod().Name, DateTime.Now.ToLongTimeString());
            }
     
            public UrlParamsFilterHttpHandler(IHttpHandler originalHandler)
            {
                OriginalHandler = originalHandler;
                HttpContext.Current.Trace.Write(MethodInfo.GetCurrentMethod().Name, DateTime.Now.ToLongTimeString());
            }
     
            public void ProcessRequest(HttpContext context)
            {
                HttpContext.Current.Trace.Write(MethodInfo.GetCurrentMethod().Name, DateTime.Now.ToLongTimeString());
                //// do not worry, ProcessRequest() will not be called, but let's be safe 
                //throw new InvalidOperationException("MyHttpHandler cannot process requests.");
            }
     
            public bool IsReusable
            {
                // IsReusable must be set to false since class has a member! 
                get { return false; }
            }
        }

    是否是2.0 和4.0 有很大的区别吗?asp.net 生命周期应该是一样的啊,如果这个有问题的话,还有没有其他方法可以替代解决此问题呢。请大家多多指教。 

    评论

    #1楼 2012-02-27 12:15 Ivony...      

    MethodInfo.GetCurrentMethod().Name
    把这个换成一个字符串常量。
      回复 引用 查看   

    #2楼[楼主2012-02-27 12:28 AndyYu      

    多谢。这个只是为了监控临时添加,对程序影响可以忽略  回复 引用 查看   

    #3楼 2012-02-27 12:56 jason-lee      

    要新建一个应用程序池,不要跟.NET2.0 程序共用一个池。这样很慢的。  回复 引用 查看   

    #4楼[楼主2012-02-27 13:11 AndyYu      

    @jason-lee
    谢谢,已经为项目建立单独新的应用程序池了。
      回复 引用 查看   

    #5楼 2012-02-27 13:53 dudu      

    参考文章:Did you know? – ASP. NET’s performance problems caused by the Session
    相关博问:http://q.cnblogs.com/q/32311/
      回复 引用 查看   

    #6楼 2012-02-27 17:24 水牛刀刀      

    我在博问回答你这个问题了,你试试,应该可以的。  回复 引用 查看   

     
  • 相关阅读:
    数据库连接
    TUniConnection连接
    在Bootstrap中得模态框(modal)中下拉不能显示得问题
    git ---匿名分支和checkout命令
    git ---合并和删除分支
    Git ---创建和切换分支
    git --删除文件、重命名
    git --版本对比
    git ---回到过去
    git ---查看工作状态和历史提交
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2371010.html
Copyright © 2011-2022 走看看