EntityFrameWork 性能优化

  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("---------------------------------------------------");
                    }
                }
            }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值