第一种

            #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. Breathe me

    Help, I have done it again 帮帮我,我又做错了. I have been here many times before 哪怕这已经不是一两次了. Hurt myself ag ...

  2. Scala中的Implicit详解

    Scala中的implicit关键字对于我们初学者像是一个谜一样的存在,一边惊讶于代码的简洁, 一边像在迷宫里打转一样地去找隐式的代码,因此我们团队结合目前的开发工作,将implicit作为一个专题进 ...

  3. java持有对象-集合类

    面阿里的时候,面试就让我说一下集合 当时由于条件原因没听清面试官的问题,后来面试后,面试官让问他问题的时候,才说明白是什么 下面就接受一下我了解的集合类 集合类中大致可以分为两个体系 一.collec ...

  4. ByteArrayInputStream

    package org.example.io; import java.io.ByteArrayInputStream;import java.io.IOException; /** * ByteAr ...

  5. spring-data-redis和jedis版本对应收集总结

    基于spring主版本为4.3.13.RELEASE的项目,测试以下对应版本可用. spring-data-redis版本 jedis版本 备注 1.5.2.RELEASE 2.7.3   1.6.0 ...

  6. BCrypt加密算法

    用户表的密码通常使用MD5等不可逆算法加密后存储,为防止彩虹表破解更会先使用一个特定的字符串(如域名)加密,然后再使用一个随机的salt(盐值)加密. 特定字符串是程序代码中固定的,salt是每个密码 ...

  7. 初探系列 — Pharbers用于单点登录的权限架构

    一. 前言 就职公司 法伯科技是一家以数据科技为驱动, 专注于医药健康领域的循证咨询公司. 以数据科学家身份, 赋能医药行业. 让每位客户都能享受数据带来的价值, 洞察业务, 不止于数据, 让决策更精 ...

  8. java:当字符串为We Are Happy.经过替换之后的字符串为We%20Are%20Happy

    方法一: public class Solution { public String replaceSpace(StringBuffer str) { String a=str.toString(); ...

  9. PyTorch-Adam优化算法原理,公式,应用

    概念:Adam 是一种可以替代传统随机梯度下降过程的一阶优化算法,它能基于训练数据迭代地更新神经网络权重.Adam 最开始是由 OpenAI 的 Diederik Kingma 和多伦多大学的 Jim ...

  10. __import__

    __import__有个参数 fromlist =[]1.当这个参数为空的时候__import__('a.b.c') 等效于 import a 2.__import__('a.b.c', fromli ...