C# ASP.Net本地化性能

C# ASP.Net本地化性能,c#,asp.net,localization,C#,Asp.net,Localization,在ASP.Net中,您可以为希望在应用程序中支持的每个区域性创建一个资源文件 e、 g.(在资源设计器中)HelloWorld=“Hello World” 然后可以在代码中引用此资源文件 Label1.Text = Resources.General.HelloWorld 注意:General是我的常规资源文件的名称 这意味着VisualStudio已经编译了这些资源,因此您可以对它们进行类型安全访问(+intellisense,这很有用) 然而,这有多有效 Net是否创建了一个包含常量的类

在ASP.Net中,您可以为希望在应用程序中支持的每个区域性创建一个资源文件

e、 g.(在资源设计器中)HelloWorld=“Hello World”

然后可以在代码中引用此资源文件

Label1.Text = Resources.General.HelloWorld
注意:General是我的常规资源文件的名称

这意味着VisualStudio已经编译了这些资源,因此您可以对它们进行类型安全访问(+intellisense,这很有用)

然而,这有多有效

  • Net是否创建了一个包含常量的类,这些常量在预运行编译中以某种方式动态链接,因此它们是某种“内置”到程序集的

  • 或者,当请求资源以获得本地化值时,它是否扫描文件(某处)

如果是这样的话,第一种方法似乎更有效。本地化是否会给应用程序增加性能开销。我认为,如果本地化为站点增加了有价值的可用性,“合理”的性能冲击是可以的


谢谢。

查看Resource.Designer.cs文件

基本上,VS.NET创建了一个具有静态属性的类,该类使用ResourceManager类通过常量键访问本地化资源。所有字符串和其他资源都作为资源存储在单独的(特定于区域性的)附属程序集中

根据Thread.Current.CurrentUICulture,CLR将加载相应的附属资源程序集


至于性能,因为ResourceManager在哈希表中缓存资源,所以应该相对较快。

谢谢您的回答。因此,为了澄清这一点,会出现一个请求,区域性设置为es,线程设置为该区域性,ASP.Net然后加载相关的附属程序集并将其链接到主web.dll。然后,对这些资源的任何请求都来自附属程序集?ResourceManager首先在中查找与当前UI区域性资源程序集对应的命名资源,如果找到这些资源,它将定位该资源并返回该资源。如果找不到命名资源,则使用回退策略,查找具有指定名称的中立资源。如果未找到任何内容,则返回null。