【问题标题】:Is there a way to see exactly how much memory each XAML element uses?有没有办法准确查看每个 XAML 元素使用了多少内存?
【发布时间】:2018-10-02 07:30:36
【问题描述】:

有没有办法准确查看每个 XAML 元素使用了多少内存? 我不确定互联网上是否有任何列表。我想确切了解每个 XAML UI 元素需要多少内存,以便在特定情况下进行选择时更具选择性。

有没有准确的方法在调试器中获取这些信息?

【问题讨论】:

  • 这种内存优化不是我们.NET程序员通常会处理的。尤其是在 XAML UI 虚拟化中,应该保持内存配置文件可管理 (blogs.msdn.microsoft.com/albulank/2009/11/12/…)。如果您确实有内存问题,那么您的后端数据可能是问题的一千倍。不仅本身会占用内存,还会导致更多的 XAML 元素被实例化。
  • 至于测量结果:属性值继承能够节省相关数量的内存 (docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/…)。如果字符串在整个过程中(即使在输出过程中),内存测量就会变得更加困难。
  • 内存量与数据绑定的项目数成正比。测量 1、10、100、1000、1000000 个项目并检查分配的托管堆,例如使用 MemAnalyzer (github.com/Alois-xx/MemAnalyzer) 或 Visual Studio 分析器。这样您就可以准确测量每个项目消耗的内存量。
  • 感谢您的回复。好吧,我只是想确切地知道不同对象需要多少内存。例如,ListView、TextBlock、TextBox、StackPanel 等。除了运行时可能引入的额外复杂性之外,我想知道是否有办法知道这些项目占用了多少 RAM。我想进一步优化我的 ListView 并使用我能找到的最简单的元素。
  • 这实际上是不可能的,因为每个控件的内存量取决于它的ControlTemplateStyle。即使是一个简单的TextBox 也可以有一个复杂的控制模板,更不用说像ListViewDataGrid 这样巨大的东西了。

标签: c# wpf visual-studio xaml uwp


【解决方案1】:

如果您想获得 .net 和/或 WPF 中每个对象使用的确切内存量,您必须咨询内存分析器。 Visual Studio 包括一个(可能只有 Visual Studio 的企业版),或者您可以使用 dotMemory 或类似工具。 (只需使用您喜欢的搜索引擎搜索 .net Memory Profiler)

教程:https://blogs.msdn.microsoft.com/devops/2014/04/02/diagnosing-memory-issues-with-the-new-memory-usage-tool-in-visual-studio/

【讨论】:

    猜你喜欢
    • 2016-07-07
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多