gpt4 book ai didi

.net - IntPtr、SafeHandle 和 HandleRef - 解释

转载 作者:行者123 更新时间:2023-12-03 07:25:28 36 4
gpt4 key购买 nike

在不向我指点 MSDN 的情况下,有人可以对每一个的目的以及何时使用它们给出简洁、清晰的解释吗? (IntPtr、SafeHandle 和 HandleRef)

最佳答案

IntPtr 只是一个简单的基于整数的结构,可以保存指针(即,32 位系统上的 32 位大小,64 位系统上的 64 位大小)。

SafeHandle 是一个用于保存 Win32 对象句柄的类 - 它有一个终结器,可确保在对对象进行 GC 时关闭句柄。 SafeHandle 是一个抽象类,因为不同的 Win32 句柄有不同的关闭方式。在引入 SafeHandle 之前,IntPtr 用于保存 Win32 句柄,但确保它们正确关闭并防止被 GC 处理是程序员的责任。

HandleRef 是一种确保在 P/Invoke 调用过程中非托管句柄不会被 GC 回收的方法。如果没有像 HandleRef 这样的东西,如果您的托管代码在 P/Invoke 调用之后不对句柄执行任何操作,如果 GC 在 P/Invoke 调用期间运行,它将不会意识到该句柄是仍在使用中,可能会对其进行 GC。我想象(但我不确定也没有看过)SafeHandle 可能会使用 HandleRef 作为其封装句柄管理的一部分。

关于.net - IntPtr、SafeHandle 和 HandleRef - 解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/526661/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com