第一种

            #region 第一种延迟加载 用到的时候就会去查询数据。
//用到的时候就会去查询数据。 //IQueryable<UserInfo> temp = from u in dbContext.UserInfo
// //where u.UName.Contains("o")
// //&& u.UName.StartsWith("D")
// select u;        //测试一
//foreach (var userInfo in temp)
//{
// Console.WriteLine(userInfo.ID + " " +userInfo.UName);
//} //foreach (var userInfo in temp)
//{
// Console.WriteLine(userInfo.ID + " " + userInfo.UName);
//}
//数据库监视发现:查询了两次。
//因为IQueryable每次用到时都会重新查询,所以查询到的数据不可作为缓存。
       //测试二: linq的重用,在temp的基础上继续查询得temp2
//var temp2 = from u in temp
// where u.ID > 0
// select u;
//foreach (var userInfo in temp2)
//{
// Console.WriteLine(userInfo.ID + " " + userInfo.UName);
//}
//数据库监视发现 temp和temp2一共只查询了一次,两次linq查询只生成了一条sql语句。 相当于原生ADO时期的sql脚本拼接。
#endregion

第二种

            #region 第二种延迟加载
            //IQueryable<UserInfo> temp = from u in dbContext.UserInfo
// //where u.UName.Contains("o")
// //&& u.UName.StartsWith("D")
// select u;
     //单表多次查询
            //foreach (var userInfo in temp)  交互1次
//{
// foreach (var orderInfo in userInfo.OrderInfo) 交互 100次
// {
// Console.WriteLine(userInfo.UName+ " " +orderInfo.ID + " " + orderInfo.Content);
// }
//}
       //多表一次连接查询 Include("OrderInfo")
            //IQueryable<UserInfo> temp = from u in dbContext.UserInfo.Include("OrderInfo")
// //where u.UName.Contains("o")
// //&& u.UName.StartsWith("D")
// select u;
            //情景1:当数据量小的时候(一般不会再页面展示所有数据,而是分页,数据量不会特别大,那么必须减少连接数据库的次数)
            //若采用单表查询,若查询100个用户数据,共需与数据库交互101=1+100,交互的时间就比一次"连接查询"时间还要长。
//所以数据量较少时直接使用连接查询比价高效。
            //情景2:当数据量特别大时。例如: 用户表跟订单表数据都是10000 0000条
//若采用一次连接查询:根据笛卡尔积,数据库过滤数据实际条数是10000 0000 * 10000 0000
//很可能会使数据库崩溃。
//若采单表多次查询,内存中重组数据。可以很好的解决以上问题。
//问题来了: //并发访问 多次查询,若出现并发访问怎么办?
//理解并发:
//在操作系统中,并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。
//在关系数据库中,允许多个用户同时访问和更改共享数据的进程。SQL Server 使用锁定以允许多个用户同时访问和更改共享数据而彼此之间不发生冲突。
//在这里访问由于锁的存在,并发问题转换成了计算能力问题,计算能力可以通过添加服务器来讲解决。 //3死锁问题:
//理解死锁
//死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
//出现情况
// 表连接查询出现: 进程X占用A表,X想连接B表,必须等B表释放; 但同时y又占用了B表,y想有连接了A表,在等A表释放。 结果x、y都在等待,二A、B表同时被占用着。
// 连接的表越多,死锁问题越突出。
//解决方案: 临时表
//为什么能解决?因为此时锁定的是临时表,而原始表处于释放状态。
//临时表有两种类型:本地表和全局表。在与首次创建或引用表时相同的 SQL Server 实例连接期间,本地临时表只对于创建者是可见的。当用户与 SQL Server 实例断开连接后,将删除本地临时表。全局临时表在创建后对任何用户和任何连接都是可见的,当引用该表的所有用户都与 SQL Server 实例断开连接后,将删除全局临时表。
//详情可百度临时表用法
#endregion

怎么看生成的sql语句的?

1)数据库里

详情可百度:  SQL Server Profiler (事件追踪)

2)断点调试时
查询数据后,快速监视如下。查询数据前是没有这些内容的。


致博客园

1)傻逼的150字数限制!

2)范围竟然不包括代码!

3)添加成功修改失败,似乎对修改很有意见!

致网友:如有错误,望立刻指正。

EF 延时加载与死锁的更多相关文章

  1. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

  2. JAVA的单例模式与延时加载

    延迟加载(lazy load)是(也称为懒加载),也叫延迟实例化,延迟初始化等,主要表达的思想就是:把对象的创建延迟到使用的时候创建,而不是对象实例化的时候创建.延迟加载机制是为了避免一些无谓的性能开 ...

  3. MyBatis入门(五)---延时加载、缓存

    一.创建数据库 1.1.建立数据库 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.7.9-log : Database - mybatis ****** ...

  4. 一段实现页面上的图片延时加载的js

    大家如果使用firebug去查看的话就会发现,当你滚动到相应的行时,当前行的图片才即时加载的,这样子的话页面在打开只加可视区域的图片,而其它隐藏的图片则不加载,一定程序上加快了页面加载的速度,对于比较 ...

  5. WinForm的延时加载控件概述

    这篇文章主要介绍了WinForm的延时加载控件,很实用的技巧,在C#程序设计中有着比较广泛的应用,需要的朋友可以参考下   本文主要针对WinForm的延迟加载在常用控件的实现做简单的描述.在进行C# ...

  6. picLazyLoad 图片延时加载,包含背景图片

    /** * picLazyLoad 图片延时加载,包含背景图片 * $(img).picLazyLoad({...}) * data-original 预加载图片地址 * alon */ ;(func ...

  7. iOS 延时加载

    这里列举了四种线程延时加载的方法, 1.performSelector方法 此方法必须在主线程中执行,并不是阻塞当前的线程 [self performSelector:@selector(delayM ...

  8. js实现网页图片延时加载的原理和代码 提高网站打开速度

    有时我们看到一些大型网站,页面如果有很多图片的时候,当你滚动到相应的行时,当前行的图片才即时加载的,这样子的话页面在打开只加可视区域的图片,而其它隐藏的图片则不加载,一定程序上加快了页面加载的速度,对 ...

  9. [整理]DLL延时加载 && 设置进程私有环境变量

    DLL延时加载鉴于静态和动态加载之间,即无需在代码中显示加载但它内队依然是动态加载的方式只是系统帮处理了.这样做好处是: 1. 可以加快启动时间(因为它是动态加载在需要的时间加载), 2. 减小编写L ...

随机推荐

  1. 2.0vue导出excel

    如果没有插件导入 import FileSaver from 'file-saver' import XLSX from 'xlsx'导入依赖 import FileSaver from 'file- ...

  2. 更改MySQL/Postgresql密码

    Parrot包括几个SQL引擎,但是当它们被预先安装时,默认密码未被配置,并且拒绝访问其root用户. 重新配置Mysql / Mariadb密码 停止MySQL服务. sudo service my ...

  3. Hadoop 和 MPP 的比较

    如果我们回顾5年前会发现,那就是当时Hadoop不是大多数公司的选择,特别是那些要求稳定和成熟的平台的企业. 在这一刻,选择非常简单:当您的分析数据库的大小超过5-7 TB时,您只需启动MPP迁移项目 ...

  4. Koa 学习笔记

    开始 就像官网上说的,一切框架都从一个"Hello World"开始,首先我们新建一个 package.json,内容尽量简单: { "name": " ...

  5. MySQL--Skip GTID CAP

    import os script_file = "./skip_file.sql" def write_script(script_content): file_handle = ...

  6. Dubbo 源码分析 - 服务引用

    1. 简介 在上一篇文章中,我详细的分析了服务导出的原理.本篇文章我们趁热打铁,继续分析服务引用的原理.在 Dubbo 中,我们可以通过两种方式引用远程服务.第一种是使用服务直联的方式引用服务,第二种 ...

  7. javascript之location详解

    window.location.hash 使用说明 今天给大家详细汇总了关于window.location.hash的知识点,属性以及用法等等,非常的实用,并附上了例子,有需要的小伙伴可以参考下. l ...

  8. Javascript高级编程学习笔记(27)—— BOM(1)window对象1

    ECMAScript是JS的核心 但是对于在浏览器中运行的JS,BOM显然才是真正的核心 我们知道JS是由三个部分组成的 BOM.DOM.ECMAScript 之前的文章我们主要介绍的是ECMAScr ...

  9. 吴恩达机器学习笔记29-神经网络的代价函数(Cost Function of Neural Networks)

    假设神经网络的训练样本有

  10. Oracle报错#“ORA-01791: 不是 SELECTed 表达式”解决方法

    今天遇到一个Oracle报错,写篇博客记录一下 简单看一下下面这个sql,这也查询是没报错的 select a.area_seq, a.area_name from t_unit_area a WHE ...