Memory 检查内存碎片的工具

Memory 检查内存碎片的工具,memory,memory-management,profiling,Memory,Memory Management,Profiling,我最近阅读了有关内存碎片的主题: 及 我想看看一些内存分配图,比如本文中的作者 你能推荐一些工具来获得这样的内存分配图吗?这样我就可以知道内存是否是碎片化的,以及可用的最大可用空间是多少 我在Windows上,所以我更喜欢在这个系统上工作的工具。是一个可视化GC内存和堆使用的工具,还提供了源代码。另一个类似的应用程序也链接在评论中 如果您需要能够分析.NET解决方案的内存使用情况,您可以签出它,它可以与Visual Studio中的项目一起运行,并跟踪进程和对象如何使用内存。该问题有间接解决方案

我最近阅读了有关内存碎片的主题: 及

我想看看一些内存分配图,比如本文中的作者

你能推荐一些工具来获得这样的内存分配图吗?这样我就可以知道内存是否是碎片化的,以及可用的最大可用空间是多少

我在Windows上,所以我更喜欢在这个系统上工作的工具。

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


如果您需要能够分析.NET解决方案的内存使用情况,您可以签出它,它可以与Visual Studio中的项目一起运行,并跟踪进程和对象如何使用内存。

该问题有间接解决方案。我开发服务器应用程序已经有几年了。最初我们是按需分配,结果在运行数周后,服务器的性能下降。作为一种解决方法,我们采用了这种方法-

假设您有用户定义的类X,Y,Z。。您需要在运行时从堆中分配。在启动时分配n个对象X。将所有这些对象放入空闲池列表中。根据需要,获取x的每个对象并将其提供给您的应用程序。使用时,将其放入忙池列表中。 当应用程序想要释放它时,将其放回免费池列表。遵循这一开始的Y.Z等


由于您在启动时分配了所有需要的对象,并且在程序退出之前从未释放回操作系统内存管理器,因此您将不会面临内存碎片导致的性能下降。

虽然您的解决方案是合理的,但这里有一个替代方案