C# 面试题 目录

C# 中什么是托管资源和非托管资源?

推荐答案

在C#中,托管资源是由.NET运行时(CLR)自动管理的内存资源,而非托管资源则是CLR无法自动管理的资源,通常需要手动释放。

  • 托管资源:由CLR自动管理的内存资源,例如对象实例、数组等。CLR通过垃圾回收器(GC)自动回收不再使用的托管资源。

  • 非托管资源:CLR无法自动管理的资源,例如文件句柄、数据库连接、网络套接字等。这些资源需要手动释放,通常通过实现IDisposable接口并在Dispose方法中释放资源。

本题详细解读

托管资源

托管资源是指那些由.NET运行时(CLR)自动管理的内存资源。CLR通过垃圾回收器(GC)来管理这些资源。当对象不再被引用时,GC会自动回收这些对象所占用的内存。托管资源包括:

  • 对象实例
  • 数组
  • 字符串
  • 其他引用类型

由于托管资源由CLR自动管理,开发者通常不需要关心这些资源的释放问题。

非托管资源

非托管资源是指那些CLR无法自动管理的资源。这些资源通常涉及到操作系统级别的资源,例如:

  • 文件句柄
  • 数据库连接
  • 网络套接字
  • 窗口句柄
  • 其他外部资源

由于CLR无法自动管理这些资源,开发者需要手动释放它们。通常的做法是实现IDisposable接口,并在Dispose方法中释放这些资源。例如:

-- -------------------- ---- -------
------ ----- ----------------- - -----------
-
    ------- ------ ------- -- -----

    ------ -------------------
    -
        ------ - --------------------------------- -- -------
    -

    ------ ---- ---------
    -
        ---------------------------------------- -- -------
        -------------------------- -- ------
    -

    --------------------
    -
        ---------- -- ---------
    -
-

使用using语句

为了确保非托管资源能够及时释放,C#提供了using语句,它可以自动调用Dispose方法:

总结

托管资源由CLR自动管理,而非托管资源需要开发者手动管理。通过实现IDisposable接口和使用using语句,可以确保非托管资源得到及时释放,避免资源泄漏。

纠错
反馈