EF 延时加载与死锁
第一种
#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 延时加载与死锁的更多相关文章
- 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理
服务器文档下载zip格式 刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...
- JAVA的单例模式与延时加载
延迟加载(lazy load)是(也称为懒加载),也叫延迟实例化,延迟初始化等,主要表达的思想就是:把对象的创建延迟到使用的时候创建,而不是对象实例化的时候创建.延迟加载机制是为了避免一些无谓的性能开 ...
- MyBatis入门(五)---延时加载、缓存
一.创建数据库 1.1.建立数据库 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.7.9-log : Database - mybatis ****** ...
- 一段实现页面上的图片延时加载的js
大家如果使用firebug去查看的话就会发现,当你滚动到相应的行时,当前行的图片才即时加载的,这样子的话页面在打开只加可视区域的图片,而其它隐藏的图片则不加载,一定程序上加快了页面加载的速度,对于比较 ...
- WinForm的延时加载控件概述
这篇文章主要介绍了WinForm的延时加载控件,很实用的技巧,在C#程序设计中有着比较广泛的应用,需要的朋友可以参考下 本文主要针对WinForm的延迟加载在常用控件的实现做简单的描述.在进行C# ...
- picLazyLoad 图片延时加载,包含背景图片
/** * picLazyLoad 图片延时加载,包含背景图片 * $(img).picLazyLoad({...}) * data-original 预加载图片地址 * alon */ ;(func ...
- iOS 延时加载
这里列举了四种线程延时加载的方法, 1.performSelector方法 此方法必须在主线程中执行,并不是阻塞当前的线程 [self performSelector:@selector(delayM ...
- js实现网页图片延时加载的原理和代码 提高网站打开速度
有时我们看到一些大型网站,页面如果有很多图片的时候,当你滚动到相应的行时,当前行的图片才即时加载的,这样子的话页面在打开只加可视区域的图片,而其它隐藏的图片则不加载,一定程序上加快了页面加载的速度,对 ...
- [整理]DLL延时加载 && 设置进程私有环境变量
DLL延时加载鉴于静态和动态加载之间,即无需在代码中显示加载但它内队依然是动态加载的方式只是系统帮处理了.这样做好处是: 1. 可以加快启动时间(因为它是动态加载在需要的时间加载), 2. 减小编写L ...
随机推荐
- 转 tomcat+nginx+redis实现均衡负载、session共享(二)
http://www.cnblogs.com/zhrxidian/p/5491285.html http://www.cnblogs.com/zhrxidian/p/5432886.html
- 2018 python面试题
在开始看面试题时,我觉得我们很有必要去了解一下市场需要什么样的python开发人员: 1.python爬虫工程师(scrapy,xpath,正则,mongdb,redis,http 协议,html) ...
- Self referencing loop detected for property 错误
EF 序列化返回json时 报错:Self referencing loop detected for property 解决方案:在webapiconfig.cs文件中,增加设置: 1.config ...
- day_6深浅拷贝,元组字典集合类型定义和各种操作方法
首先我们来讲一下深浅拷贝 1:值拷贝,假设一个列表等于L1 再定义一个L2=L1 这样就是值拷贝 L2只是存的L1存列表的地址,所以当L1发生改变,L2也随之改变 2:浅拷贝,L2=L1.copy( ...
- 利用Swashbuckle生成Web API Help Pages
利用Swashbuckle生成Web API Help Pages 本文将通过Swagger的.NET Core的实现封装工具Swashbuckle来生成上一篇-<创建ASP.NET Core ...
- FineCMS 5.0.10 多个 漏洞详细分析过程
0x01 前言 已经一个月没有写文章了,最近发生了很多事情,水文一篇.今天的这个CMS是FineCMS,版本是5.0.10版本的几个漏洞分析,从修补漏洞前和修补后的两方面去分析. 文中的evai是特意 ...
- git常用命令速查:创建,修改提交,撤销,切换分支,合并分支,变基解决冲突
创建 $ git init #在当前目录下创建一个空的本地仓库 $ rm -rf .git #删除本地仓库 $ git add . #把当前目录下的所有文件添加到暂存区 $ git commi ...
- Python面向对象1:类与对象
Python的面向对象- 面向对象编程 - 基础 - 公有私有 - 继承 - 组合,Mixin- 魔法函数 - 魔法函数概述 - 构造类魔法函数 - 运算类魔法函数 # 1. 面向对象概述(Objec ...
- soul开源网关项目搭建学习
1. soul开源网关项目搭建学习 1.1. 地址 https://gitee.com/shuaiqiyu/soul 1.2. 介绍 官方介绍:这是一个异步的,高性能的,跨语言的,响应式的API网关. ...
- 关于常用的编码工具如何引入jar包
myeclipse和eclipse(差不多)引入jar包: 普通项目: 1.对准你的项目创建一个文件夹名字尽量命名成lib(注意要和src平级,不要在src下创建文件夹). 2.将下载好的依赖放到li ...