`
etalk
  • 浏览: 2988 次
  • 性别: Icon_minigender_1
  • 来自: huizhou
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

ado.net entity framework 查询性能比较

阅读更多

ado.net entity framework使用不同的方法查询数据的不同性能

 

第一部分:重复查询单个实体

第一种:Linq To Entitiess

代码如下:

  static void Main(string[] args)
        {
            DateTime time1;
            DateTime time2;
            time1 = DateTime.Now;
            NorthwindEntities context = new NorthwindEntities();
            for (int i = 0; i < 1000; i++)
            {
                var data = (from c in context.Customers where c.CustomerID == "ALFKI" select c).FirstOrDefault();
                string addr = data.Address;
            }
            time2 = DateTime.Now;
            Console.WriteLine((time2-time1).ToString());
        }

查询使用时间为6.2秒左右

第二种:使用Entity SQL

  static void Main(string[] args)
        {
            DateTime time1;
            DateTime time2;
            time1 = DateTime.Now;
            NorthwindEntities context = new NorthwindEntities();
            for (int i = 0; i < 1000; i++)
            {
                var data = context.Customers.Where("it.CustomerID=@Id", new System.Data.Objects.ObjectParameter("Id", "ALFKI")).FirstOrDefault();
                string addr = data.Address;
            }
            time2 = DateTime.Now;
            Console.WriteLine((time2-time1).ToString());
        }

查询使用时间为6.2秒左右

第三种:使用EntityKey 来查询

 static void Main(string[] args)
        {
            DateTime time1;
            DateTime time2;
            time1 = DateTime.Now;
            NorthwindEntities context = new NorthwindEntities();
            for (int i = 0; i < 1000; i++)
            {
                var data = context.GetObjectByKey(new System.Data.EntityKey("NorthwindEntities.Customers", "CustomerID", "ALFKI")) as Customers;
                string addr = data.Address;
            }
            time2 = DateTime.Now;
            Console.WriteLine((time2-time1).ToString());
        }

查询使用时间为1秒,没错是一秒

总结:

前两种方法查询所使用的时间都差不多为6.2秒,时间比较长,但是使用第三种方法查询数据仅仅使用了1秒,为什么会相差那么多,区别在于前两种方法每次查询都要从数据库中查找,1000次查询每次的查询时间都一样,但是第三种方法只有第一次是从数据库中查数据,后面的999次都是在context通过主键直接取数据,速度当然会快很多啦,EF4.0之前的实体当含有外键引用时是自动生成对象引用的,而EF4.0现在多了一个外键ID,这样我们可以很方便的通过外键来查询数据

第二部分:查询不同是实体

第一种:Linq To Entitiess

 static void Main(string[] args)
        {
            DateTime time1;
            DateTime time2;
            NorthwindEntities context = new NorthwindEntities();
            //先将Customers所有的主键查询出来
            List<string> keys = context.Customers.Select(c => c.CustomerID).Distinct().ToList();
            //和上面的context以作区别
            NorthwindEntities  context_ = new NorthwindEntities();
            time1 = DateTime.Now;
            foreach (var key in keys)
            {
                var data = context_.Customers.Where(c => c.CustomerID == key).FirstOrDefault();
                string addr = data.Address;
            }
            time2 = DateTime.Now;
            Console.WriteLine((time2 - time1).ToString());
        }

查询使用时间0.68秒左右

第二种:使用Entity SQL

static void Main(string[] args)
        {
            DateTime time1;
            DateTime time2;
            NorthwindEntities context = new NorthwindEntities();
            //先将Customers所有的主键查询出来
            List<string> keys = context.Customers.Select(c => c.CustomerID).Distinct().ToList();
            //和上面的context以作区别
            NorthwindEntities  context_ = new NorthwindEntities();
            time1 = DateTime.Now;
            foreach (var key in keys)
            {
                var data = context_.Customers.Where("it.CustomerID=@Id", new System.Data.Objects.ObjectParameter("Id", key)).FirstOrDefault();
                string addr = data.Address;
            }
            time2 = DateTime.Now;
            Console.WriteLine((time2 - time1).ToString());
        }

查询使用时间0.5秒左右

第三种:使用EntityKey 来查询

  static void Main(string[] args)
        {
            DateTime time1;
            DateTime time2;
            NorthwindEntities context = new NorthwindEntities();
            //先将Customers所有的主键查询出来
            List<string> keys = context.Customers.Select(c => c.CustomerID).Distinct().ToList();
            //和上面的context以作区别
            NorthwindEntities  context_ = new NorthwindEntities();
            time1 = DateTime.Now;
            foreach (var key in keys)
            {
                var data = context_.GetObjectByKey(new System.Data.EntityKey("NorthwindEntities.Customers", "CustomerID", key)) as Customers;
                string addr = data.Address;
            }
            time2 = DateTime.Now;
            Console.WriteLine((time2 - time1).ToString());
        }

查询时间为0.18秒左右

总结:

通过比较第三种方法仍然比前两种来的快,查询效率更高

 

使用EntityKey来查询数据比其他两种方法来的更快,而且不是快一点点,而是相差有好几倍,这里的比较并没有使用存储过程来比较查询,但是从这里我们可以看出,在平常的应用中如果知道实体的主键尽量用主键来查询

分享到:
评论

相关推荐

    ADO.NET EntityFramework 完整版教程(从初级到高级)

    ### ADO.NET Entity Framework 教程知识点概览 #### 一、Entity Framework 概述 - **背景**:Entity Framework (EF) 是 Microsoft 推出的一款 ORM (Object Relational Mapping) 工具,旨在简化数据访问层的开发,...

    ado.net entity framework extension

    这个“ado.net entity framework extension”指的是对原生Entity Framework的扩展,以增强其功能和性能。 1. **Entity Framework基础**:Entity Framework的核心概念包括实体(Entities)、实体数据模型(EDM)、上...

    ADO.NET Entity Framework

    在ADO.NET Entity Framework中,存储过程的使用可以增加应用程序的灵活性和性能。以下是如何在Entity Framework中使用存储过程进行查询、插入、更新和删除操作的详细步骤: 1. **创建数据库**: 首先,我们需要...

    ADO.NET sql、LINQ to sql、ADO.NET Entity Framework(EF)数据库连接性能比较

    本文将深入探讨三种常见的.NET框架下的数据库访问技术:ADO.NET SQL、LINQ to SQL以及ADO.NET Entity Framework(EF),并重点分析它们在数据库连接性能上的差异,特别是在插入和读取操作,包括模糊检索方面的表现。...

    ADO.NET EntityFramework 实体完整版教程

    ### ADO.NET Entity Framework 实体完整版教程 #### EF 基本概况 **Entity Framework (EF)** 是 Microsoft 提供的一种对象关系映射 (ORM) 框架,旨在简化面向数据的应用程序开发过程。EF 的核心优势在于它能够允许...

    ADO.NET Entity Framework使用封装示范代码

    ADO.NET Entity Framework(简称EF)是微软提供的一款强大的数据访问框架,它使得开发者能够以对象关系映射(ORM)的方式操作数据库,极大地简化了数据库编程。在这个"ADO.NET Entity Framework使用封装示范代码"中...

    ADO.NET Entity Framework 的分页类代码.rar

    总的来说,这个压缩包提供的代码可以帮助开发者在使用ADO.NET Entity Framework时,轻松实现数据库查询的分页功能,提高应用程序的性能和用户体验。通过使用这个分页类,开发者可以避免手动编写复杂的SQL分页查询,...

    ADO.NET Entity Framework4.1

    ADO.NET Entity Framework 4.1 是微软开发的一个强大的对象关系映射(ORM)框架,它构建在 ADO.NET 之上,旨在简化数据库应用程序的开发。这个框架允许开发人员使用面向对象的编程方式来操作数据库,而无需直接编写...

    ADO.NET Entity Framework 增删改查

    实体框架 EntityFramework 使用概念层、映射层和逻辑层将逻辑数据库结构抽象化。 什么是 ADO.NET Entity Framework? ADO.NET Entity Framework 是一种实体框架,它提供了一种新的数据访问方式,允许开发人员使用...

    ADO.NET Entity Framework概述

    ADO.NET Entity Framework概述PPT讲解,已经学习,好东西、分享

    ADO.NET Entityframework 書籍

    #### 标题理解:“ADO.NET Entityframework 書籍” 本书籍主要介绍了ADO.NET与Entity Framework的核心概念、技术细节及其在现代软件开发中的应用。其中特别强调了DbContext作为Entity Framework的一个关键组件,在...

    ADO.NET Entity Framework 开发实践

    ### ADO.NET Entity Framework 开发实践 #### 一、ADO.NET Entity Framework 概览 **ADO.NET Entity Framework**(简称 EF)是微软提供的一种用于 .NET 应用程序的数据访问技术,它支持开发者通过面向对象的方式来...

    ado.net entity framework 电子书

    最近ado.net entity framework 电子书,入门学习的最佳书籍

    ADO.NET EntityFramework入门教程

    ADO.NET EntityFramework入门教程,分别讲解Storage Provider ,Mapping Layer ,Object Services,LINQ to Entities 四层如何设计使用

    Using ADO.NET Entity Framework in Domain-Driven

    ADO.NET Entity Framework Domain-Driven

    Ado.Net Entity Framework+WCF的一个Demo

    Ado.Net Entity Framework 和 WCF(Windows Communication Foundation)是.NET框架中的两个重要组件,它们分别在数据访问和分布式服务方面发挥着关键作用。本Demo旨在展示如何将这两者结合使用,构建一个完整的应用...

    ado.net entity framework实例

    ADO.NET Entity Framework是一个强大的数据访问框架,它允许开发者以对象关系映射(ORM)的方式处理数据库,从而减少了对SQL语句的直接依赖。这个实例涵盖了Entity Framework与SQL Server的集成,帮助我们理解如何...

    ADO.NET Entity Framework 入门示例向导

    ADO.NET Entity Framework 是微软开发的一款强大的ORM(对象关系映射)框架,用于简化数据库操作,使得开发者无需直接编写SQL语句即可与数据库进行交互。它将数据库中的表、视图等对象映射为C#或VB.NET中的实体类,...

    ado.net entity framework 进阶书

    ### ADO.NET Entity Framework 进阶知识点解析 #### 一、ADO.NET Entity Framework 概述 ADO.NET Entity Framework(简称 EF)是微软提供的一种对象关系映射(Object-Relational Mapping,ORM)框架,它允许开发者...

Global site tag (gtag.js) - Google Analytics