由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
DotNet版 - 弱问c# using, try有啥用
相关主题
分享一个今天遇到的.net调用mongodb的问题有谁来谈谈yukon么?
用ASP .Net 和Python for .Net做了一个小范例.NET前景的障碍
觉得C#的valuetype和boxing真的是没有必要用DLL会快些吗?
C# on JVM?ASP.Net比ASP倒底好多少?
.NET 入门系列(1)--什么是.NETmemory leak
Managed Code vs. Unmanaged Codetemplate?
c#有没有第三方地免费解释器?C# to C/C++
from C++ to C#哪位大虾知道caller ID 如何编写?
相关话题的讨论汇总
话题: dispose话题: using话题: c#话题: gc话题: try
进入DotNet版参与讨论
1 (共1页)
S****e
发帖数: 10596
1
本人低手,完全靠抄抄改改过日
C# 连接数据库很多人的程序
用using, try
我发现不用也可以
请高人说说为啥要用这两个
谢谢
a*****a
发帖数: 163
2
Using 是为用完了及时释放和数据库的连接(等Garbage Collector 来释放资源不如手
动来得迅速)。try是怕连接失败吧。
y*****7
发帖数: 1555
3
using其实就是一个short版的try final 在final里,会call被wrap的object的Dispose
方法。其实就是让你可以少code一点。
所有资源的释放,还是走的GC。所以一般来说不是caller可以控制的。
try 是用来抓exception,如果你这里不抓,就会bubble up。而如果bubble up的时候
,你的object hold了其他资源(如IO口,DB connection什么的),会造成resource
leak
S****e
发帖数: 10596
4
谢谢
释放链接就是
con.Close();吗?
也就是using不用这个就能释放是吧?

【在 a*****a 的大作中提到】
: Using 是为用完了及时释放和数据库的连接(等Garbage Collector 来释放资源不如手
: 动来得迅速)。try是怕连接失败吧。

S****e
发帖数: 10596
5
谢谢
对于简单的数据库应用
假设就是往里面insert一行
在真正的网站应用中,除非服务器down掉
应该不会出现exception吧

Dispose

【在 y*****7 的大作中提到】
: using其实就是一个short版的try final 在final里,会call被wrap的object的Dispose
: 方法。其实就是让你可以少code一点。
: 所有资源的释放,还是走的GC。所以一般来说不是caller可以控制的。
: try 是用来抓exception,如果你这里不抓,就会bubble up。而如果bubble up的时候
: ,你的object hold了其他资源(如IO口,DB connection什么的),会造成resource
: leak

a*****a
发帖数: 163
6
我怎么记得如果实现了IDisposible,并调用object.Dispose(),则会释放资源。并不是
所有资源都走GC.

Dispose

【在 y*****7 的大作中提到】
: using其实就是一个short版的try final 在final里,会call被wrap的object的Dispose
: 方法。其实就是让你可以少code一点。
: 所有资源的释放,还是走的GC。所以一般来说不是caller可以控制的。
: try 是用来抓exception,如果你这里不抓,就会bubble up。而如果bubble up的时候
: ,你的object hold了其他资源(如IO口,DB connection什么的),会造成resource
: leak

d****d
发帖数: 133
7
这个取决于具体的IDisposible.Dispose是怎么实现的

【在 a*****a 的大作中提到】
: 我怎么记得如果实现了IDisposible,并调用object.Dispose(),则会释放资源。并不是
: 所有资源都走GC.
:
: Dispose

s***o
发帖数: 2191
8
I think it depends on implementation. Dispose() is more for releasing
unmanaged resources.

【在 a*****a 的大作中提到】
: 我怎么记得如果实现了IDisposible,并调用object.Dispose(),则会释放资源。并不是
: 所有资源都走GC.
:
: Dispose

c**t
发帖数: 2744
9
用了using 就不再需要 .close()

【在 S****e 的大作中提到】
: 谢谢
: 对于简单的数据库应用
: 假设就是往里面insert一行
: 在真正的网站应用中,除非服务器down掉
: 应该不会出现exception吧
:
: Dispose

y*****7
发帖数: 1555
10
分几层说吧:
1. using会在complie的时候自动扩展成try finally。如果被wrap的object implement
了IDisposal interface,就会在finally 里call这个object的dispose() method.然后
,using的任务完成了‘
2. 在dispose method里,具体的实现来完成具体的工作。例如是db connection的话,
dispose会call close把链接关掉(大多数的情况下其实是把connection返回给pool)
。这样,从caller的角度来看,你已经把resource release了。
3. resource 分成manager的和unmanager的。manager一般就是.NET的object,
unmanage的一般是各种resource的handler,如db的链接,io的链接。对于manage的,一
般就是把他mark成没有reference了,这样下次GC运行的时候就可以清掉了。 好像有个
method叫GC.Supress什么,这个好像是主动运行GC。这块我也不是非常清楚,不过,好
像也还是一个suggestion,GC动不动,里面还有算法的。
4. 对于unmanage的resource,一般是通过一个.net的object wrapper来管理。当你
call dispose的时候,这个object的dispose method 负责call具体的resource的close
method来清理内存什么的。
5.有时候你可能会用到destructor。这个应该是极不推荐的,具体的可以看看CLR via
C#。那里有很好的例子
y*****7
发帖数: 1555
11
不一定,比如说定义了一个foreign key,但插入的数据违反了这个key,就会有
SqlException

【在 S****e 的大作中提到】
: 谢谢
: 对于简单的数据库应用
: 假设就是往里面insert一行
: 在真正的网站应用中,除非服务器down掉
: 应该不会出现exception吧
:
: Dispose

v******n
发帖数: 421
12
一点小更正:using里面的type必须实现IDisposable
a9
发帖数: 21638
13
显式gc需要调用Gc.Collection()

时候
resource

【在 a*****a 的大作中提到】
: 我怎么记得如果实现了IDisposible,并调用object.Dispose(),则会释放资源。并不是
: 所有资源都走GC.
:
: Dispose

1 (共1页)
进入DotNet版参与讨论
相关主题
哪位大虾知道caller ID 如何编写?.NET 入门系列(1)--什么是.NET
Need Help: a very wierd Managed C++ interop problemManaged Code vs. Unmanaged Code
大家觉得 CLR via C# 这本书怎么样?c#有没有第三方地免费解释器?
[合集] 大家觉得 CLR via C# 这本书怎么样?from C++ to C#
分享一个今天遇到的.net调用mongodb的问题有谁来谈谈yukon么?
用ASP .Net 和Python for .Net做了一个小范例.NET前景的障碍
觉得C#的valuetype和boxing真的是没有必要用DLL会快些吗?
C# on JVM?ASP.Net比ASP倒底好多少?
相关话题的讨论汇总
话题: dispose话题: using话题: c#话题: gc话题: try