2012-05-31 68 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