【发布时间】: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 并使用我能找到的最简单的元素。
-
这实际上是不可能的,因为每个控件的内存量取决于它的
ControlTemplate和Style。即使是一个简单的TextBox也可以有一个复杂的控制模板,更不用说像ListView和DataGrid这样巨大的东西了。
标签: c# wpf visual-studio xaml uwp