14

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

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

[Debuggable(false, false)]

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

4

3 回答 3

5

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

其中特别提到了 CompilationRelaxations.RelaxedArrayExceptions 和 CompilationRelaxations.RelaxedNullReferenceException。

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

于 2008-09-16T23:14:42.087 回答
2

另一个:文字字符串(在源代码中声明的字符串)默认情况下嵌入到一个池中以节省内存。

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)]
于 2008-09-16T17:39:18.650 回答
1

我发现了另一个:NeutralResourcesLanguageAttribute。根据这篇博客文章,它通过指定当前(中性)程序集的区域性来帮助加载程序更快地找到正确的附属程序集。

[NeutralResourcesLanguageAttribute("nl", UltimateResourceFallbackLocation.MainAssembly)]
于 2008-09-16T07:48:37.913 回答