2012-05-31 38 views
6

我最近读到内存碎片主题: How to solve Memory FragmentationWhat is memory fragmentation?工具检查内存碎片

我希望看到一些内存分配映射,如在这些文章作者http://pavlovdotnet.wordpress.com/2007/11/10/memory-fragmentation/

你能建议更换一些工具来得到这样的内存分配映射,所以我可以看到内存是否分散,以及最大的可用空间是多少。

我在Windows上,所以我宁愿在这个系统上工作的工具。

回答

4

Here是一个可视化GC内存和堆用法的工具,也提供了源代码。另一个类似的应用程序也在评论中链接。

如果您需要能够剖析.NET解决方案的内存使用情况,可以查看ANTS Memory Profiler,它可以在Visual Studio中与项目一起运行,并且可以监视进程和对象如何使用内存。

2

这是间接的解决方案。我已经开发了几年的服务器应用程序。最初我们正在按需分配数据,因此在运行几周后服务器的性能下降。作为解决方法,我们遵循这种方法 -

假设您有用户定义的类X,Y,Z,..您需要在运行时从堆中分配。在启动时分配n个对象X.将所有这些对象放入空闲池列表中。根据需要,获取x的每个对象并将其提供给您的应用程序。使用时,将其放入繁忙的游泳池列表中。 当应用程序想要释放它时,将其放回到空闲池列表中。因为您在启动时分配所有必需的对象,并且不会退回到操作系统内存管理器,直到您的程序退出,您将不会面临由内存碎片引起的性能下降。

+0

虽然您的解决方法是健全的,但这里有一个替代方法https://msdn.microsoft.com/en-us/library/windows/desktop/aa366750(v=vs.85).aspx – ComputerSaysNo