C# Using的一个比较好的语言文字解释

其实很早就开始使用using了.但是对这个语法糖我自己一直没有总结也没有一个很好的文字描述解释.今天看其他的博文的时候发现有人对其做了简单的解释我觉得很好,很适合一种讲解.于是抄录下来

using (var context = new EF6RecipesContext())
  {
    ...
  }
  如果你不熟悉这种模式,也没关系,因为它很简单。一般情况下,我们通过new操作符并将结果赋值给变量来得到一个对象的实例,当这个变量超出其生命周期,该对象不再被别的任何对象引用。垃圾回收器会在某一个时间点开始释放该对象所占的内存工作。 对于我们.NET应用程序中的大多数对象来说,这是一个巨大的工作,因为他们会一直占用着资源,直到垃圾回收器开始工作。而垃圾回收器具有不确定性,因为他总是按自己的计划来完成其工作,对此我能施加的影响很有限。
  DbContext上下文对象的实例占用着像数据库连接这样的,我们希望不使用时就立即释放的系统资源。我们真的不希望数据库连接的释放工作要等到垃圾回收器来完成。
  using()语句有很好的特性。首先,当代码执行完using(){}代码块时,上下文中的Dispose()方法会被自动调用。因为DbContext上下文实现了IDisposable接口,该方法将关闭所有数据库连接,清理任何需要被释放的资源。
  其次,不管怎样,只要代码离开using(){}代码块,方法Dispose()就会被调用。最重要的是,代码块里即使遇到return语句或者是抛出了异常,它都能保证资源得到合理的释放。

原文地址:https://www.cnblogs.com/it-dennis/p/10180193.html

时间: 2024-10-09 01:05:52

C# Using的一个比较好的语言文字解释的相关文章

Oracle数据库多语言文字存储解决方案

一.关于字符集 字符集(也称字元集,Character Set)就是字符编码表(codepage),一个字符不论英文.中文.韩文等在计算机系统内存或硬盘中通过二进制的字节(Byte)保存,这个二进制的编码就是字符编码(也称内码),字符集就是字符与内码的对应(映射)表. 因为多国语言的原因,就出现了根据本国语言制作的字符集.如使用最广泛的ASCII编码,由美国国家标准局(即ANSI)制定,适用于所有拉丁.英文字符.中国大陆使用GB2312,GBK,GB18030等字符集,这些字符集包含所有汉字字符

给你一个输入框,可存文字,图片,视频,书写测试用例

1.给你一个输入框,可存文字,图片,视频,书写测试用例 等价类.边界值.猜测法 1.1.1 文本框的测试 如何对文本框进行测试 a,输入正常的字母或数字. b,输入已存在的文件的名称: c,输入超长字符.例如在"名称"框中输入超过允许边界个数的字符,假设最多255个字符,尝试输入256个字符,检查程序能否正确处理: d,输入默认值,空白,空格: e,若只允许输入字母,尝试输入数字:反之:尝试输入字母: f,利用复制,粘贴等操作强制输入程序不允许的输入数据: g,输入集,例如,NUL及\

snml.exe为简单网络管理语言的解释执行器。本地打包下载:https://files.cnblogs.com/files/snmlsnmpsshtelnetipv6/snml_utf8ipv6.zip

本地打包下载:https://files.cnblogs.com/files/snmlsnmpsshtelnetipv6/snml_utf8ipv6.zip snml.exe为简单网络管理语言的解释执行器. 原文地址:https://www.cnblogs.com/snmlsnmpsshtelnetipv6/p/12381672.html

做一个分布式、跨语言、跨平台、敏捷 需要那些技术做支撑?

做了7年的开发了,时间越久越是发现自己需要一个像标题写的那样的一个架构做为整个平台的支撑. 我的技术种类又是.net开发,总觉得.net技术人才容易出现瓶颈:其实这种瓶颈更像是这种环境造成的.简单快捷的开发本来就是.net所追求的,而这种追求导致整个语言平台在技术上都喜欢用最直接简单的方法解决问题,至于架构,可维护,持续升级,还是等项目上线或是出了问题之后再说.成熟.稳健并被公认的技术架构似乎每个做技术的都是见仁见智,都有自己独立的理解,而像java一样ssh等成熟公认的架构在业界基本寥寥无几,

一个计算器的C语言实现

今天在读<编译原理及实践>时,看到了一个简单的整数计算器的实现. 按照书上的思路,我稍微进行了扩展: 1.从整数计算器扩展到小数计算器. 2.支持除法 3.支持空字符. 运行效果如下: 代码很简单,如下: cal.c: #include <stdio.h> #include <stdlib.h> char token; double exp(void); double term(void); double factor(void); char getPrintableC

一个有趣的C语言问题:s = (++i) + (++i) + (++i)

今天看到有人提了这么个问题: i=3,s=0 s=(++i)+(++i)+(++i ) 为什么结果是s=16,i=6呢 初一看,我想结果不应该是15(4+5+6)吗,是他搞错了吧,保险起见,我决定用编译器运行一下,看一下结果,先是用VC是了一下,结果确实没错, 会不会是编译器问题,不行,我再试试其他编译器,换了codeblocks试了一下: 那么DevC++呢,我再试了一下: 结果还是这样,好吧,我放弃了,结果就应该是16,那么这又是为什么呢? 我定下心来,仔细想了想,想了片刻,觉得应该是这样:

由asp的一个错误,看语言的不同:asp &amp; java

今天查看网页源代码,无意发现源代码尾部抛出asp的错误信息,但没有显示在网页上. 如果没查看源代码,还没发现asp运行代码出错了. 大致情况是这样,在asp中,有一个变量来表示用户当前使用的容量,注意这个变量是字符串,格式如: 20.3M,  50.6G 最后一个字符不是M,就是G 程序中需要做一个判断,如果用户使用的容量超过 50G,就弹出提示信息了,相关代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 <% str = "59.3G" if right(

一个简单的C语言语法检查器的实现

我自己的实现方法的核心过程:首先用一个非终结符代表所有要检查的程序代码,然后根据文法将这个整体的符号不断展开,以拼凑成按检查的程序的顺序排列的终结符序列,能成功说明语法正确,否则有错误. 关键词:分词:First集:Select集: 目前还存在的问题: 1.因为同一个非终结符->终结符的转化可能有多种解释,所以目前我的非终结符展开这里是用递归写的,因此不能定位具体错在哪里. 2.int a={1,2};int a[2]={1,'b'};这种该出错的地方不会出错.这个比较致命,但目前还没想好怎么解

自己独立写的一个简单的C语言计算

#include <stdio.h>#include <stdlib.h>int main(){    int a=43;    int b=22;    float c=12.1; int d=a+b;    float e=a*b;    double f=c/b; printf("d=%d, e=%f, f=%lf\n", d, e, f);    printf("pause");    return 0; } 关键字的运用最重要