我最近阅读了有关内存碎片的主题: How to solve Memory Fragmentation和What is memory fragmentation?
我希望在这些文章http://pavlovdotnet.wordpress.com/2007/11/10/memory-fragmentation/
中看到一些内存分配图,例如作者你可以推荐一些工具来获取这样的内存分配映射,这样我就可以看到内存是否碎片化以及可用的最大可用空间是多少。
我在Windows上,所以我更喜欢在这个系统上工作的工具。
答案 0 :(得分:5)
Here是一个可视化GC内存和堆使用情况的工具,也提供了源代码。另外一个类似的应用程序也在评论中链接。
如果您需要能够分析.NET解决方案的内存使用情况,可以查看ANTS Memory Profiler,它可以与Visual Studio中的项目一起运行,并密切关注进程和对象如何使用内存。
答案 1 :(得分:2)
该问题有间接解决方案。我已经开发了几年的服务器应用程序。最初我们按需进行分配,因此在运行几周后服务器性能下降。作为一种解决方法,我们采用了这种方法 -
假设您有用户定义的类X,Y,Z,..您需要在运行时从堆分配。在启动时分配n个对象X.将所有这些对象放在空闲池列表中。根据需要,获取x的每个对象并将其提供给您的应用程序。在使用时,将其放入繁忙的池列表中。 当应用程序想要释放它时,将其放回到空闲池列表中。按照Y. Z等的这个创业精神
由于您在启动时分配所有需要的对象,并且在程序退出之前永远不会释放回操作系统内存管理器,因此您不会面临内存碎片导致的性能下降。