我目前正在单声道 (Mac OSX) 中运行一个程序,它读取一个非常大的数据文件并在聚合后创建汇总统计信息。

奇怪的是,我在程序中的某个时刻收到以下错误消息:
Garbage collector could not allocate 16384 bytes of memory for major heap section
我希望有一个 OOM 异常,或者我可以使用的其他东西。我尝试使用以下方法增加最大堆大小:
export MONO_GC_PARAMS=max-heap-size=4g
但是,它最终告诉我我需要将它设置为一个整数,尝试手动输入带有适当零的值会导致在执行开始时发生 gdb 转储。

令我烦恼的是,我认为在代码的这一特定部分中断时,机器上有 16384 字节可用,我认为它应该能够很好地进行 GC 并获得更多内存。

有谁知道如何解决这一问题?

最佳答案

如果您使用的是 mono 2.10.8 或更高版本,您可以尝试使用更高级的 sgen 垃圾收集器执行 mono 应用程序,该垃圾收集器不像默认 GC 那样保守。

它解决了我遇到的一些内存泄漏问题,也许您遇到了相关问题。

要使用 sgen 运行,您必须确保安装了 mono-runtime-sgen,然后在执行程序时使用以下命令行参数:

单声道 --gc=sgen YourProgram.exe

关于c# - 避免 Mono Cryptic GC 错误消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21970852/

10-14 16:21