gpt4 book ai didi

.net - .NET 中的堆外存储与 Java 中的一样吗?

转载 作者:行者123 更新时间:2023-12-02 01:10:37 24 4
gpt4 key购买 nike

.NET 及其任何运行时(CLR、DLR)是否支持堆外存储 Java does

最佳答案

是的,你在这里有两个相似的选择。

最简单的就是制作一个结构数组。当分配一个结构类型的数组时,每个元素都是实际的结构值,因此数据将连续布局,除了获取特定数组索引所需的取消引用之外,不需要任何取消引用。此技术为您提供类型安全,并且不需要任何特殊权限。数组本身将被垃圾收集。

或者,您可以通过使用 Marshal 的成员来遵循 Java 示例的精神。类:

  • AllocHGlobal() 将分配一个内存区域。
  • FreeHGlobal() 将释放之前的分配。
  • Read*()/Write*() 方法可用于获取和存储数字。 (类似于 Java 示例中使用的 get*()/put*() 方法。)
  • Copy() 重载可用于将数组元素序列复制到内存中或从内存中复制出来。

我建议使用结构数组方法,除非您有令人信服的理由不这样做。 (Java 中需要“不安全”方法,因为 Java 不支持用户定义的值类型。C# 支持。)

如果您确实需要使用Marshal 方法,请确保将这些操作封装在一个实现了Dispose pattern 的类中。 .通过这种方式,消费者可以显式控制内存分配的生命周期,同时如果消费者未明确处置它,仍允许垃圾收集器释放内存分配。

关于.net - .NET 中的堆外存储与 Java 中的一样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17891659/

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