gpt4 book ai didi

c# - MemoryFailPoint 在 WinXP 64 早期触发

转载 作者:太空宇宙 更新时间:2023-11-03 11:48:52 26 4
gpt4 key购买 nike

我创建了一个具有自组织内存管理的卷类(称为 VoxelVolume),因为 C# 中的 GC 没有提供良好的机制来管理映射、取消映射和重新映射的卷内容。虽然我可以使用虚拟内存机制,但问题是文件通常太大而无法放入页面文件,我不想强​​迫用户增加页面文件大小。

目前这个系统运行良好,没有资源不足和 OutOfMemoryExceptions 的问题,因为使用 MemoryFailPoint 的 InsufficientMemoryException 运行良好。这都是在主内存为 2GB 的 32 位 WinXP 系统上测试的。

同样的机制在主内存为32GB的64位系统上运行也很好,但是当应用程序运行时MemoryFailPoint突然抛出一个异常,虽然还有24GB的主内存是空闲的。另一点是当 MemoryFailPoint 触发一次时,它每次都会触发并且没有机会摆脱它。

到目前为止我读到的是,有一个小对象和一个大对象堆(SOH 和 LOH)。但只有 SOH GC 才会真正处理,我可以通过应用 GC.Collect() 和 GC.WaitForPendingFinalizers 将 SOH 从未使用的对象中释放出来。 MemoryFailPoint 显然是对 LOH 进行一点控制的唯一方法,但由于系统上剩余的内存足够,我看不出 MemoryFilePoint 应该触发的原因。

这里有使用 MemoryFailPoint 的经验吗?

谢谢你的帮助马丁

最佳答案

我想 MFP 由于内存碎片而启动。据我所知,在 64 位系统中,您仍然不能分配大于 2GB 的 block 。

关于c# - MemoryFailPoint 在 WinXP 64 早期触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2617808/

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