zoukankan      html  css  js  c++  java
  • MVC视图引擎优化

    请首先看如下内容:

    未找到视图"Index"或其母版视图,或没有视图引擎支持搜索的位置。搜索了以下位置
    ~/Views/Home/Index.aspx
    ~/Views/Home/Index.ascx
    ~/Views/Shared/Index.aspx
    ~/Views/Shared/Index.ascx
    ~/Views/Home/Index.cshtml
    ~/Views/Home/Index.vbhtml
    ~/Views/Shared/Index.cshtml
    ~/Views/Shared/Index.vbhtml

     

     

    版权归二师弟和博客园共同所有,欢迎转载和分享知识。转载请注明出处!

    Mvc4和mvc3是这样查找的,其中*.aspx和*.ascx以及*.vbhtml都是我们不需要的。

    我们可以想象,这里不管采用什么办法,肯定至少4次访问文件系统并判断对应文件是否存在,才会找到我们的index.cshtml,这样的开销小型应用可以忽略,如果并发量千万级(总之很大,具体未测)肯定对性能有一定影响。

    怎么避免,不要去查找*.aspx,*.ascx以及*.vbhtml?

    经过几番折腾,我们成功找到了解决办法:

    Mvc中有两个视图引擎,webformengine和razorengine,解决办法就是,确定不使用webform的情况下,移除webformengine,然后移除razorengine并添加改写了的razorengine。

     

    移除的代码在global.ascx.cs的application_start方法中这样写:

    ViewEngines.Engines.Clear();

    重写razorengine的方法:

    public class Engine : RazorViewEngine

    {

    public Engine( )

            {

                base.AreaViewLocationFormats = new string[]

                {

                    "~/Areas/{2}/Views/{1}/{0}.cshtml",

                    "~/Areas/{2}/Views/Shared/{0}.cshtml",

                };

                base.AreaMasterLocationFormats = new string[]

                {

                    "~/Areas/{2}/Views/{1}/{0}.cshtml",

                    "~/Areas/{2}/Views/Shared/{0}.cshtml",

                    

                };

                base.AreaPartialViewLocationFormats = new string[]

                {

                    "~/Areas/{2}/Views/{1}/{0}.cshtml",

                    "~/Areas/{2}/Views/Shared/{0}.cshtml",

                };

                base.ViewLocationFormats = new string[]

                {

                    "~/Views/{1}/{0}.cshtml",

                    "~/Views/Shared/{0}.cshtml",

                };

                base.MasterLocationFormats = new string[]

                {

                    "~/Views/{1}/{0}.cshtml",

                    "~/Views/Shared/{0}.cshtml",

                };

                base.PartialViewLocationFormats = new string[]

                {

                    "~/Views/{1}/{0}.cshtml",

                    "~/Views/Shared/{0}.cshtml",

                };

                base.FileExtensions = new string[]

                {

                    "cshtml",

                };

            }

    }

    然后添加改写的视图引擎:

    ViewEngines.Engines.Add(new Engine());

    版权归二师弟博客园共同所有,欢迎转载和分享知识。转载请注明出处!

    最终application_start方法如下:

  • 相关阅读:
    AJAX 类似电子表格的功能实现(续采购授权系统)
    Asp.net 程序优化
    Sql server 性能优化
    LinqToSql查询
    LInqToSql 增删改
    LinqToXml(删除某节点)
    LinqTo数组和cast,typeof的用法
    ThreadPool
    C# 定时器定时更新
    linqToXml查询
  • 原文地址:https://www.cnblogs.com/langu/p/4148690.html
Copyright © 2011-2022 走看看