我的理解是,一旦代码退出块,.NET 中的using语句就会调用IDisposable对象的Dispose()方法.
using声明是否还做其他事情?如果没有,似乎以下两个代码示例实现完全相同的事情:
Using Con as New Connection()
Con.Open()
'do whatever '
End Using
Dim Con as New Connection()
Con.Open()
'do whatever '
Con.Dispose()
Run Code Online (Sandbox Code Playgroud)
我会给那些确认我是正确的人或者指出我错了并给出解释原因的人给出最好的答案.请记住,我知道某些类可以在其Dispose()方法中执行不同的操作.这个问题是关于using语句是否达到与调用对象Dispose()方法完全相同的结果.
这两个代码示例之间是否有任何区别,如果没有,为什么using存在?
StreamWriter writer;
try {
writer = new StreamWriter(...)
writer.blahblah();
} finally {
writer.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
VS:
using (Streamwriter writer = new Streamwriter(...)) {
writer.blahblah
}
Run Code Online (Sandbox Code Playgroud)
我的意思是在第二个例子中你真的应该把它放在try块中,所以添加finally块确实不会花费太多精力.我知道整个事情可能包含在一个更大的尝试块中但是,对我来说似乎是多余的.
我正在使用EmguCV,.NET的OpenCV包装器.我正在处理所有创建的对象,但我的应用程序仍在使用越来越多的内存(在发布配置中).我使用.NET Memory Profiler调试了我的应用程序并得到了这个结果:
http://img532.imageshack.us/img532/2503/screenqv.png
所有对象实例计数都是振荡但GChandle实例计数器正在增加,直到我的机器无法使用.垃圾收集器不会释放内存(我认为).
我正在使用VS 2008专业版,Win7教授32位,既是最新的,也是最后一个稳定版的emguCV.
我可以发布一些应用程序代码,如果有帮助的话.
谢谢,抱歉我的英语.马丁
通过阅读这篇文章,我有点困惑:
他们演示了调用2个一次性对象,结束了更多的内存使用,而没有usings 的方法,执行相同的指令,使用较低的内存.
你能解释一下为什么在这个例子中使用会增加内存消耗吗?
我想了解在某些情况下是否应该避免使用.
我认为dispose释放记忆是一个好主意,但看起来我错了.
c# ×4
using ×3
dispose ×2
.net ×1
emgucv ×1
idisposable ×1
memory-leaks ×1
opencv ×1
streamwriter ×1
try-catch ×1
vb.net ×1