我正在开发一个我们遇到内存问题的桌面应用程序。这些技术是.Net,C ++和Fortran。由于第三方组件的限制,该应用程序目前在x86中构建。它是一个内存密集型应用程序,它经常会创建大型数组(在计算过程中最多可达50Mb)。在特定情况下,我可以让应用程序相对快速地耗尽内存,而任务管理器只显示350Mb分配给进程。应用程序将无法分配50Mb阵列并抛出错误。这种分配错误可能发生在Fortran或.Net中。我一直在尝试使用ANTS内存分析器来诊断错误,但是这表明没有大对象堆碎片,这对我来说表明.Net中的内存碎片没有问题。
是否仍有可能这是内存碎片,因为ANTS声称在分配数组时甚至很少存储在大对象堆上?如果有的话,有哪些工具可以诊断和处理这类问题?
答案 0 :(得分:1)
我不知道这会产生多大的影响,但可能会尝试激活low fragmentation heap
除此之外,您可以尝试避免不断分配和释放空间。 如果你经常需要更大的临时内存块,你可以一次分配一个足够大的块,并将其作为工作内存给你的子程序。
您还可以为某些特定类重载new运算符,并实现自己更智能的内存处理。