WPF资源的范围:将其推送到应用程序范围(app.xaml)对性能有益吗?

4

A) 如果我有一个需要从用户控件中使用的资源,从性能方面来说,哪种更好?是将其包含在用户控件范围内还是从app.xaml引用该资源?

B) 现在我们有所有100多个样式都从app.xaml引用。将它们移动到各自的用户控件中是否值得努力?


1
你现在有性能问题吗? - paparazzo
加载时间很慢。但是项目中文件的组织不好,所有样式xaml都在一个大文件夹中,并且所有这些xaml都从app.xaml引用。我正在考虑将那些未在整个应用程序中使用的资源移动到用户控件范围内。想知道除了良好的文件夹和引用结构外,这是否会带来任何性能优势。 - Socrates
3个回答

2
A) 如果我有一个需要从用户控件中使用的资源,在性能方面应当将它包含在用户控件范围内还是从 app.xaml 引用这个资源?
答:由于 XAML 是编译成 BAML,然后在启动时加载,因此你不会看到任何差异。现在大多数 XAML 东西都是共享的(例如线性画刷、下拉样式),所以最好不要直接把它放在控件上以便重用相同的样式和优化因素。
B) 现在我们有从 app.xaml 中引用的所有 100 多个样式。将它们移动到它们各自的用户控件中是否值得努力?
答:这是适得其反的,因为你将无法重复使用它们。
如果你的 XAML 很慢并且正在使用 MVVM,请检查创建了多少对象。今年我遇到了一个问题,即为每个项重新创建上下文菜单,并使它在所有项之间共享(在树视图中),改善了初始化时间。

1
添加应用程序资源可以更好地重复利用,但它增加了复杂性,因为不清楚哪些页面使用特定的资源。 《Pro Silverlight 4 in C#》Matthew MacDonald

总的来说,这取决于应用程序范围内资源重用的级别。如果资源被广泛重用,则将其放置在应用程序资源中。如果您只想在一个UserControl中使用样式,并且不在其他地方使用它,则将此样式放置在app.xaml中将会过度冗余。我认为即使资源仅用于2-3个页面,最好也将其放置在每个页面中。

从性能角度来看,我认为您没有那么多的资源会影响性能。
以下是可以帮助您提高加载时间的文章:

更新:
MSDN在许多情况下都是有帮助的。阅读本文后,您将获得许多问题的答案:资源字典
描述资源性能问题的文章:Silverlight XAML性能问题和共享资源


0

我会把它放在最合适的地方。如果它是在多个地方使用或者可能被多次使用的东西,那么就把它放在app.xaml中。如果它非常特定于某个页面/用户控件/窗口,那么就把它放在那里。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接