学习EF之贪懒加载和延迟加载(2)

通过昨天对EF贪婪加载和延迟加载的学习,不难发现,延迟加载还是很好用的,但是问题也就来了,有的时候我们只需要加载一个实体,不需要和他相关的外部实体,这时候我们来看看EF延迟加载时怎么作用的吧

打开profiler

在Main函数入口处写一个查询,在Console.Read();处打一个断点

      static void Main(string[] args)
        {
            var context = new EFDbContext();
            var user = context.Users.FirstOrDefault(a => a.Id == 1);
            Console.WriteLine(user.Name);
            Console.Read();
        }

在profiler中最后一行可以看他EF生成sql语句

也就是说我们只需要实体本身的属性的时候EF不会帮我们加载外部实体

接下来修改一下Main函数中的内容

      static void Main(string[] args)
        {
            var context = new EFDbContext();
            var users = context.Users.FirstOrDefault(a => a.Id == 1);
            //var users = context.Users.Include("Articles").FirstOrDefault(a => a.Id == 1);
            Console.WriteLine(users.Name);
            foreach (var a in users.Articles)
            {
                Console.WriteLine(a.Title + "," + a.Category.Name + "\n");
            }
            Console.WriteLine(users.Articles.Count() + "\n" + users.Categories.Count() + "\n");
            Console.Read();
        }

进行单步调试并观察profiler发现,延迟加载是在我们需要某一个外部实体时才从数据库中查找的

换成贪懒加载

结论;

延迟加载是在我们需要的时候才去加载,当需要加载大量的外键对象时会增加与数据库的读取次数

此时可以考虑贪婪加载

时间: 2024-08-01 21:38:54

学习EF之贪懒加载和延迟加载(2)的相关文章

EF中的贪婪加载和延迟加载(懒加载)

在上一章中,我们使用了Linq对Entity Framework进行了一个查询,但是通过学习我们却发现了懒加载给我来的性能上的开销是很到的,尤其是在循环中,如果数据量不是很多的情况下还可以接受,如果数据量一旦大气来,那么这个效率则是影响非常大的.那该怎么办呢?其实在Entity Framwork中,除了提供了懒加载技术还提供了一个“贪婪加载”.那么什么是贪婪加载呢?从名字上看,就是非常的粗鲁的,一次性的吧相关的数据全部查询出来,虽然在性能上说还是有点影响的,但是比起在循环中使用懒加载要强了不少了

(Object-C)学习笔记 --OC的懒加载和单例方法

OC的懒加载 什么是懒加载: 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实例化. 懒加载的好处 (1)不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强 (2)每个控件的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合 懒加载的例子: #import "MusicTableViewController.h&quo

学习 | canvas实现图片懒加载 && 下滑底部加载

用canvas实现图片的懒加载并且下滑到据底部60px的时候再次加载数据,模仿UC浏览器的新闻加载. 完整代码:https://github.com/dirkhe1051931999/writeBlog/tree/master/canvasloadimg html结构 <section class="productul" id="productul"> <input type="hidden" id="pagenuml

Mybatis学习第25节 -- 懒加载 积极与不积极

积极懒加载是指如果你访问一个对象的属性,Mybatis就会帮你把需要进步一查询的该属性或者其他属性在数据库中查询出来. 不积极懒加载是指,有这种必要的时候,采取进行必要的数据库检索 我看的教程中的Mybatis版本默认是积极的lazy加载, 而我实际用的Mybatis3.4.6实际上默认不积极的lazy加载. mybatis-config.xml文件 <settings> <!-- 打印查询语句 --> <setting name="logImpl" va

懒加载(延迟加载)

懒加载FatchType.LAZY也称为延迟加载,是Hibernate3关联关系对象默认的加载方式,所谓懒加载就是当在真正需要数据的时候,才真正执行数据加载操作.简单理解为,只有在使用的时候,才会发出sql语句进行查询.懒加载的有效期是在session打开的情况下,当session关闭后,会报异常.当调用load方法加载对象时,返回代理对象,等到真正用到对象的内容时才发出sql语句. 急加载FatchType.EAGER 也成为立即加载,时立即执行sql语句.在session没有关闭的之前,如果

图片懒加载(延迟加载)原理及实现

作为一个小前端,还有很多概念或者是技术我们不清楚,那么,我们能做的就是多多实践,最佳实践就是去看看那些流量大的网站怎么做的啦~哈哈 经常听别个说懒加载.懒加载,作为一名有上进心的程序媛,上网扒了拔,轻松get到概念了,废话不多说,进入正题: 为了减少流量,提升网站性能,图片展示型网站会采用懒加载.一般第一屏的图片直接显示,从第二屏开始采用懒加载. 通常的做法是在对<img>标签的src属性放占位图片的地址,而真实的图片地址放在img标签的某个属性中,如data-img或original之类的.

多线程下单例模式:懒加载(延迟加载)和即时加载

在开发中,如果某个实例的创建需要消耗很多系统资源,那么我们通常会使用惰性加载机制,也就是说只有当使用到这个实例的时候才会创建这个实例,这个好处在单例模式中得到了广泛应用.这个机制在single-threaded环境下的实现非常简单,然而在multi-threaded环境下却存在隐患.本文重点介绍惰性加载机制以及其在多线程环境下的使用方法.(作者numberzero,参考IBM文章<Double-checked locking and the Singleton pattern>,欢迎转载与讨论

EF中的预先加载和延迟加载

延迟加载(Lazy Loading):当实体第一次被读取时,相关数据不会被获取,只会读取本身.延迟加载的数据不会一次性查出来,而是一条一条的查询,这样就会多次请求数据库进行查询. 预先加载<Eager Loading>:预先加载会把所有的数据一次性从数据库中读取出来,预先加载就是从数据库中一次性查询所有数据,存放到内存中. 写个例子:一般我是这么处理的 1.在数据库上下文中禁用延迟加载 public DBaseContext() : base("MHaloDBaseContext&q

页面图片懒加载、延迟加载(lazyload)

文档:http://www.h-ui.net/lib/jQuery.lazyload.js.shtml github地址:https://github.com/jieyou/lazyload Lazy Load是一个用js编写的jQuery插件,用来实现图片的延迟加载.只有在浏览器可视区域的图片才会被加载,没有滚动到的区域img标签上会有一个占位图片,而真实图片不会被载入.当页面比较长,图片比较多的时候,延迟加载图片可以加快页面加载速度,在某些情况下降低服务器负担. 使用方法 1.lazyloa