如果我使用类似的东西:
using (OdbcConnection conn = new OdbcConnection(....)) { conn.open(); my commands and sql, etc. }
我是否必须做一个conn.close(); 或者使用声明是否阻止我做最后一次通话?它是否处理了使用块中的所有内容?例如,如果我将其他对象称为不相关的,那么它也会自动消耗吗?
谢谢.在阅读有关在微软网站上使用后,我不清楚.我想确保我没有任何内存泄漏.
using块将处理OdbcConnection.
正常范围规则适用于在使用块内声明的任何内容.
using块不会清理任何其他IDisposable对象.它只清理声明的项目
请注意,您可以使用块进行嵌套,或者如果项目类型相同,则可以同时初始化多个项目.
请参阅我的其他答案的最重要部分,了解如何在C#中使用using关键字以获取更多信息.
我还应该提到,一旦完成连接就可以关闭(处置)连接以释放资源.指南说调用者应该能够重复调用dispose方法.使用块基本上只是一个安全网,并允许在大多数情况下编写更清晰的代码.
[编辑]例如,在使用中进行多次初始化:使用相同的初始化多个对象,而不必使用块嵌套,如果对象是相同的类型:
using (Bitmap b1 = new Bitmap("file1"), b2 = new Bitmap("file2")) { ... }
Joel Coehoorn提到了堆叠,它是嵌套但省略了大括号,就像你可以省略a for
或者if
语句中的大括号一样.UI不会使用缩进重新格式化.我很好奇IL的样子.
using(Bitmap b = new Bitmap("filex")) using(Graphics g = Graphics.FromImage(b)) { }
使用将不同的对象放在同一个使用中是错误的 error CS1044: Cannot use more than one type in a for, using, fixed, or declaration statement.
// error CS1044 using(Bitmap b = new Bitmap("filex"), Graphics g = Graphics.FromImage(b))