在.NET中处理内存
我是.NET的初学者。NET说内存释放是自动处理的,但我在很多博客上读到,最终块将用于dbconnections来处理。如果它是自动处理的,为什么需要这样做。或者,.NET自动处理仅适用于某些不包括dbconnections的资源?。请澄清..您应该先阅读托管代码和非托管代码 (dbconnections)System.Data.SqlClient本身是托管代码。然而,它是建立在其他几个库之上的。其中有些是托管代码,有些不是在.NET中处理内存,.net,.net,我是.NET的初学者。NET说内存释放是自动处理的,但我在很多博客上读到,最终块将用于dbconnections来处理。如果它是自动处理的,为什么需要这样做。或者,.NET自动处理仅适用于某些不包括dbconnections的资源?。请澄清..您应该先阅读托管代码和非托管代码 (dbconnections)System.Data.SqlClient本身是托管代码。然而,它是建立在其他几个库之上的。其中有些是托管代码,有些不是 查询本身由数据库执行。因此,查询的文本(程序中硬编码的部分)将被视为托
(using)
块此处有更多信息
您应该先阅读托管代码和非托管代码 (dbconnections)System.Data.SqlClient本身是托管代码。然而,它是建立在其他几个库之上的。其中有些是托管代码,有些不是
(using)
块此处有更多信息
最后执行块以清理资源。控件被传递到finally块以除去资源。垃圾收集器将为您执行此操作。但很多时候,您明确希望在GC出现之前执行一段代码
有时,在某些情况下,您希望执行某些代码片段,即使出现异常,最终也会出现。执行finally block以清理资源。控件被传递到finally块以除去资源。垃圾收集器将为您执行此操作。但很多时候,您明确希望在GC出现之前执行一段代码
有时,在某些情况下,您希望执行某些代码,即使出现异常,最终也会出现这种情况。作为初学者,您真的不需要太在意这一点。您最终必须了解更多关于它的信息,但在这个阶段,您需要了解托管内存是由框架处理的。您需要记住,当您引用内存时,它将继续保留,直到所有引用都被释放,然后当垃圾收集器运行时,该内存将被自动清理 有些对象需要外部资源,例如文件、数据库连接、网络连接(包括web请求)、位图和字体等。。操作系统本身跟踪的东西。这些对象通常实现一个名为IDisposable的接口,该接口用于处置任何非托管资源 基本上,您可以查看对象的文档,如果它实现了IDisposable,那么您希望在可行的情况下尽快处理它。这可以通过对其调用Dispose()来完成,也可以通过using语句隐式地完成 如果将db连接包装在using语句中,则无需使用finally,因为内部使用是通过finally实现的。如果不使用using语句,则可能需要使用finally to call dispose。这主要取决于你 示例:
using (var dbconn = new SqlConnection()) {
// do you data access - no finally required
}
或
作为一个初学者,你真的不需要太在意这个。您最终必须了解更多关于它的信息,但在这个阶段,您需要了解托管内存是由框架处理的。您需要记住,当您引用内存时,它将继续保留,直到所有引用都被释放,然后当垃圾收集器运行时,该内存将被自动清理 有些对象需要外部资源,例如文件、数据库连接、网络连接(包括web请求)、位图和字体等。。操作系统本身跟踪的东西。这些对象通常实现一个名为IDisposable的接口,该接口用于处置任何非托管资源 基本上,您可以查看对象的文档,如果它实现了IDisposable,那么您希望在可行的情况下尽快处理它。这可以通过对其调用Dispose()来完成,也可以通过using语句隐式地完成 如果将db连接包装在using语句中,则无需使用finally,因为内部使用是impl
using (var dbconn = new SqlConnection()) {
// do you data access - no finally required
}
SqlConnection dbconn;
try {
dbconn = new SqlConnection();
// do your data access
}
catch (... various exceptions) {}
finally
{
if (dbconn != null) {
dbconn.Close();
dbconn.Dispose();
}
}