代码之家  ›  专栏  ›  技术社区  ›  Lars Truijens

哪些属性有助于运行时.NET性能?

  •  14
  • Lars Truijens  · 技术社区  · 16 年前

    我正在寻找可以通过向加载器、JIT编译器或NGEN提供提示来确保.NET应用程序的最佳运行时性能的属性。

    例如,我们有 DebuggableAttribute 应将其设置为不调试和不禁用优化以获得最佳性能。

    [Debuggable(false, false)]
    

    还有其他我应该知道的吗?

    3 回复  |  直到 16 年前
        1
  •  5
  •   Thomas Danecker    16 年前

    ECMA-335在附录F“不精确的错误”中为宽松的异常处理(即所谓的e-relaxed调用)指定了更多的compilationRelaxations,但它们尚未被微软公开。

    这里特别提到了compilationrelations.relaxedarrayeexceptions和compilationrelations.relaxednullreferenceexception。

    当您在compilationrelationsattribute的ctor中尝试一些整数时会发生什么,这很有趣;)

        2
  •  2
  •   Lars Truijens    16 年前

    另一个:文本字符串(源代码中声明的字符串)默认为 interned 放入池中以保存内存。

    string s1 = "MyTest"; 
    string s2 = new StringBuilder().Append("My").Append("Test").ToString(); 
    string s3 = String.Intern(s2); 
    Console.WriteLine((Object)s2==(Object)s1); // Different references.
    Console.WriteLine((Object)s3==(Object)s1); // The same reference.
    

    尽管在多次使用同一个文本字符串时,它会节省内存,但维护池需要一定的CPU,一旦将字符串放入池中,它将一直保持在池中,直到进程停止。

    使用 CompilationRelaxationsAttribute 您可以告诉JIT编译器您真的不希望它实习所有的文字字符串。

    [assembly: CompilationRelaxations(CompilationRelaxations.NoStringInterning)]
    
        3
  •  1
  •   Lars Truijens    16 年前

    我发现了另一个: NeutralResourcesLanguageAttribute . 根据 this blog-post它通过指定当前(非特定)程序集的区域性,帮助加载程序更快地找到正确的附属程序集。

    [NeutralResourcesLanguageAttribute("nl", UltimateResourceFallbackLocation.MainAssembly)]