不幸的是,在这种情况下,很难直接比较相对性能,因为任何降级都会出现在 WPF 引擎的深处。在 WPF 的早期,StaticResource 的使用是推荐的标准性能调整更改之一,我们倾向于在我们的组织中非常严格地遵循它并将其推荐给其他人。我真的很生气 Blend 做 Dynamic 一切,即使这有助于它在设计时正确地渲染来自其他文件的资源。
随着时间的推移,我对此的看法发生了变化,这在一定程度上是由于个人经验以及来自 Microsoft Blend 团队人员的反馈。您可能知道,Blend 完全是用 WPF 编写的,并且有一个完整的替代主题(Light),可以在应用程序运行时动态切换。这是可能的,因为他们几乎所有的样式都使用了 DynamicResource。据他们说,这并没有真正给他们带来任何真正的性能问题。鉴于 Blend 可能是现存最广泛使用的 WPF 应用程序,我倾向于对他们的观点给予很大的重视。
要考虑的另一件事是 DynamicResource 的实际用途。动态更改样式的能力是其中的一部分,但它在构建资源层次结构时为您提供的灵活性可以使管理共享样式变得更加容易。我确定您遇到过这样一种情况:StaticResource 引用在运行时爆炸,因为它指向的资源将被加载到层次结构的不同分支中。
显然,StaticResource 对于指向您知道将在正确时间可用的特定键非常有用。在手写 XAML 时,我仍然倾向于一直使用它。但是考虑到让设计人员在 Blend 中生成 XAML 所获得的生产力,您可能获得的任何微小的性能提升都可能不值得将所有内容手动维护为静态的开销。