微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# - 如何在c#中正确固定GC对象以防止AccessViolationException?

如何解决c# - 如何在c#中正确固定GC对象以防止AccessViolationException?

我需要固定一个非常小的位图图像的 Scan0。通过这样做,我想防止 GC 在内存中移动它。我使用了一些使用 IntPtr Scan0 的本机方法,当 GC 应该移动位图时,我得到一个 System.AccessViolationException。

我找到了以下方法来实现这一点:

  1. 使用 GCHandle: 当我使用 GCHandle 时,我可以分配要固定的内存。我必须自己释放内存。

  2. 使用固定语句: 当我使用 fixed 语句时,我只能使用以下块内的固定对象,在这种情况下这对我来说是不切实际的。

  3. 使用 stackalloc 表达式: 我还没有找到将 stackalloc 与 IntPtr 一起使用的方法

到目前为止我的假设是否正确?

是否有其他方法可以将 IntPtr 固定到内存中?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。