请注意,我已经了解了关于这个主题的以下问题:
然而,我发现这些问题的答案都不够具体。我还知道有关此主题的MSDN页面,但是它们似乎也缺乏关于使用资源文件的开销的技术信息。
我所面临的问题是,我们即将开始对一个相当大的WinForms应用程序进行本地化。我目前担心的是从嵌套循环中访问.resx文件中的资源的性能问题。目前,对于我们已本地化的代码的一小部分(如
如何访问.resx中的资源(它们是否在编译时包含在程序集中?)并且是否有性能优势可以将这些资源缓存并使用全局变量进行访问?
我所面临的问题是,我们即将开始对一个相当大的WinForms应用程序进行本地化。我目前担心的是从嵌套循环中访问.resx文件中的资源的性能问题。目前,对于我们已本地化的代码的一小部分(如
DataGridView
的列名、行标头等),我们将资源缓存到相关类的全局变量中并使用它们。如何访问.resx中的资源(它们是否在编译时包含在程序集中?)并且是否有性能优势可以将这些资源缓存并使用全局变量进行访问?
ResourceManager rm = new ResourceManager("ExampleResources", typeof(Example).Assembly); string greeting = rm.GetString("Greeting");
,但我从https://dev59.com/AnM_5IYBdhLWcg3w-4hg#1142840了解到,这也可以通过`Console.WriteLine(strings.Hello);`来完成,其中资源文件是`strings.resx`。有什么区别? - MoonKnightstrings.Hello
只是在使用Resources.Designer.cs
中自动生成的类。 - Matthew WatsonGetString(...)
,在我看来,这似乎并没有缓存字符串,而是在运行时从资源文件中检索它们...此外,MSDN文档也没有提到缓存。 - MoonKnightResourceManager.GetString()
,最终调用ResourceSet.GetString()
,该方法调用ResourceSet.GetObjectInternal()
,后者在哈希表中查找字符串。您可以通过检查Resharper中的代码来验证此操作。MSDN文档确实提到了缓存,并且我在上面的答案中提供了引用。 - Matthew Watson