【问题标题】:ASP.Net Localisation PerformanceASP.Net 本地化性能
【发布时间】:2010-11-25 14:00:53
【问题描述】:

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

例如(在资源设计器中)HelloWorld = "Hello World"

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

Label1.Text = Resources.General.HelloWorld

注意:General 是我的通用资源文件的名称。

这意味着 Visual Studio 已编译资源,以便您可以安全地访问它们(+ 智能感知,这很有用)。

但是,这效率如何?

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

  • 或者在请求资源时扫描文件(某处)以获得本地化值。

如果发生这种情况,第一个似乎更有效。本地化是否会为您的应用程序增加性能开销。如果本地化为网站增加了有价值的可用性,我认为“合理”的性能命中是可以的。

谢谢。

【问题讨论】:

    标签: c# asp.net localization


    【解决方案1】:

    查看 Resource.Designer.cs 文件。

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

    根据 Thread.Current.CurrentUICulture,CLR 加载对应的卫星资源程序集。

    关于性能,由于ResourceManager在HashTable中缓存资源,应该是比较快的。

    【讨论】:

    • 感谢您的回答。所以为了澄清,一个请求进来了,文化设置为例如。 es-ES,线程设置为这种文化,ASP.Net然后加载相关的附属程序集并将其链接到主web.dll。那么对这些资源的任何请求都来自附属程序集吗?
    • ResourceManager首先在当前UI文化资源集合中查找一个命名资源,如果找到,则定位该资源并返回。如果未找到命名资源,则使用回退策略,它会查找具有指定名称的中性资源。如果没有找到,则返回 null。
    猜你喜欢
    • 1970-01-01
    • 2010-10-14
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多