EntityFrameWork 性能优化

来源:互联网 发布:淘宝网帽子围巾手套 编辑:程序博客网 时间:2024/06/05 13:30
  1. 在“ 解决方案资源管理器中,双击xxx.edmx文件。

  2. 模型浏览器中,选择xxx模型 。

    这可确保生成模型和映射文件的输出目录中。


  3. 重新生成解决方案。

    经过上面的几步,就会成功xxx.csdl、xxx.msl、xxx.ssdl



    1. 在“ 解决方案资源管理器”中,选择您想要的项目的指定生成的事件。

    2. 在“ 项目 ”菜单上,单击“ 属性 ”。

    3. 选择“ 生成事件 ”选项卡。

    4. 预生 ​​成事件命令行窗口中,添加下面的预生成事件,没有换行符:

    "%windir%\Microsoft.NET\Framework\v4.0.30319\EdmGen.exe" /nologo /language:CSharp /mode:ViewGeneration "/inssdl:$(TargetDir)xxx.ssdl" "/incsdl:$(TargetDir)xxx.csdl" "/inmsl:$(TargetDir)Galaxy.msl" "/outviews:$(ProjectDir)xxx.Views.cs"

    注意上面的命令没有换行



    1. 在“ 项目 ”菜单上,单击“ 添加现有项目”。

    2. 浏览到项目的输出目录,选择xxxcsdl,然后单击“确定”。

    3. 在“ 解决方案资源管理器”,选择“添加的文件。

    4. 在“ 属性”,将“ 生成操作”设置为“ 嵌入资源”。

    5. 重复步骤1至3为的xxxssd​​l的文件,并xxx.msl的文件。




    当我们只需要读取某些数据而不需要删除、更新的时候,可以指定使用MergeOption.NoTracking的方式来执行只读查询(EF默认的方式是AppendOnly)。当指定使用NoTracking来进行只读查询时,与实体相关的引用实体不会被返回,它们会被自动设置为null。因此,使用NoTracking可以提升查询的性能。

    db.Customers.MergeOption = MergeOption.NoTracking; var cust = db.Customers.Where(c => c.City == "London");


    使用GetObjectByKey方法获取数据时,它首先会查询是否有缓存,如果有缓存则从缓存中返回需要的实体。如果没有则查询数据库,返回需要的实体,并添加在缓存中以便下次使用。

    EntityKey key1 = new EntityKey("NorthwindEntities1.Customers", "CustomerID", "♂风车车.Net"); Object cst1 = null; db.TryGetObjectByKey(key1, out cst1);


    编译查询

    提供对查询的编译和缓存以供重新使用。当相同的查询需要执行很多遍的时候,那么我们可以使用ComplieQuery将查询的语句进行编译以便下次使用,这样可以免去对同一语句的多次处理,从而改善性能。

     public void ComplieTest()        {            using (var db = new NorthwindEntities1())            { //对查询进行编译                 var customer = CompiledQuery.Compile<NorthwindEntities1, IQueryable<Customers>>((database) => database.Customers.Where(c => c.City == "London"));                //执行20次相同的查询                 for (int i = 0; i < 20; i++)                {                    DateTime dt = System.DateTime.Now;                    foreach (var c in customer(db))                        Console.WriteLine(c.CustomerID);                    Console.WriteLine(DateTime.Now.Subtract(dt).TotalMilliseconds);                    Console.WriteLine("---------------------------------------------------");                }            }        }



原创粉丝点击