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方法如下:

  • 相关阅读:
    十问5.12汶川大地震
    JZ035数组中的逆序对
    JZ037数字在排序数组中出现的次数
    JZ039平衡二叉树
    JZ033丑数
    JZ040数组中只出现一次的数字
    JZ032把数组排成最小的数
    JZ036两个链表的第一个公共结点
    JZ034第一个只出现一次的字符位置
    JZ031从 1 到 n 整数中 1 出现的次数
  • 原文地址:https://www.cnblogs.com/langu/p/4148690.html
Copyright © 2011-2022 走看看