Cam*_*ers 10 wpf optimization xaml resourcedictionary
我有一些像这样的代码
_images = new ResourceDictionary
{
Source = new Uri(@"pack://application:,,,/Trilogy.T1TY2012.Transmission;component/Resources/Images.xaml")
};
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中出现过几次(有时候是C#,有时候是等效的XAML).每个实例是否包含其每个资源的单独实例,或者是否存在跨所有资源字典共享这些资源的幕后缓存机制?
我试图决定是否需要有效地使用资源字典(即:共享特定实例),或者是否已经由WPF处理了此优化.
如果我理解你的问题,那么答案是,它们不会在不同ResourceDictionary实例之间"缓存" :ResourceDictionary的实例不会使用可能已经在另一个ResourceDictionary中实例化的任何相同类型/密钥的资源.当然,这与单个ResourceDictionary中的键形成对比; 这些条目中的每一个确实都是"缓存的",因为它们是一次创建并共享的(对于每次使用时复制的值类型资源除外).
因此,如果资源占用大量内存,则必须管理资源范围.您始终可以将每个资源放入主App.xaml字典中,这样可以确保每个条目都实例化一次,并为所有使用者共享.请注意,资源是延迟加载的:
当XAML加载程序加载应用程序代码时,不会立即处理ResourceDictionary中的项目.相反,ResourceDictionary作为对象持久存在,并且仅在特别请求时才处理各个值.
因此,您不必担心应用程序在启动时加载App.xaml中的所有资源; 它只在需要时加载它们.
| 归档时间: |
|
| 查看次数: |
1619 次 |
| 最近记录: |