【发布时间】:2013-09-22 13:02:45
【问题描述】:
我想知道在应用程序启动后,存储在Generic.xaml 文件中的Styles 何时被加载,并且在完成之后,这种情况多久发生一次。我的意思是它们是否只加载一次或每次实例化Control 的新对象时?此外,Style-Resource 真正从资源文件中读取的频率是多少?
【问题讨论】:
我想知道在应用程序启动后,存储在Generic.xaml 文件中的Styles 何时被加载,并且在完成之后,这种情况多久发生一次。我的意思是它们是否只加载一次或每次实例化Control 的新对象时?此外,Style-Resource 真正从资源文件中读取的频率是多少?
【问题讨论】:
I.我的意思是它们只加载一次还是每次实例化控件的新对象时加载?
Style's、ResourceDictionary 仅在程序开始时加载一次。引用link:
你的项目下“Themes”目录下的每个资源字典都会被“编译”(这个编译过程由msbuild和自定义构建任务完成)成BAML表示,这些BAML文件将被视为最终的资源文件编译的程序集。
主题程序集的另一个好处是您可以使用主题程序集来定义纯资源或共享资源程序集,因为主题程序集中的资源字典只会加载一次,这比 ResourceDictionary.MergedDictonaries 提供更多的好处机制。
II. 此外,Style-Resource 真正从资源文件中读取的频率是多少?
每个Style、ResourceDictionary都被编译成BAML代码,这些资源是程序集的一部分。所有程序集都由 JIT 编译器一次加载到内存中(在开始时),进一步的工作在内存中的应用程序中进行。我的意思是,我不认为应用程序每次读取一个文件的样式,按照 JIT-compiler 的逻辑,一切都以元数据的形式存储在内存中,后续的处理必须在内存中进行.
关于JIT-compiler的工作和关于.NET的工作,可以阅读精彩的book
Jeffrey Richter.
【讨论】: