你能否预编译c#程序集,使强类型代码流畅,重构友好,并且性能良好?

本文关键字:重构 性能 代码 编译 强类型 程序集 | 更新日期: 2023-09-27 17:50:15

使用强类型名允许重构友好的代码。引用属性、类型等的名称……通常涉及反射,这会增加开销,这在性能关键型应用程序中可能是一个问题。

给定以下代码:

Console.WriteLine( "{0} is now running", typeof( Program ).Name );
Console.WriteLine( "{0} is now shutting down", typeof( Program ).Name );

是否有一种方法可以在执行期间跳过反射?有没有一种方法,实际上使编译后的代码执行没有反射调用?

Console.WriteLine( "{0} is now running", "Program" );
Console.WriteLine( "{0} is now shutting down", "Program" );

我试过使用Reflection.Emit(),但似乎不能得到需要的东西。如有任何建议或想法,我将不胜感激。

你能否预编译c#程序集,使强类型代码流畅,重构友好,并且性能良好?

typeof算子和Type.Name属性实际上都是非常有效的。在这种情况下,Console.WriteLine的开销远远大于它。

对于使用"狡猾的技巧"来避免弱类型反射的其他类型的代码(例如字符串),例如使用表达式树来模拟methodoffieldof运算符,您可以将结果存储在类的static readonly字段中,因此它们只需要计算一次。

您可以很容易地使用一个变量来保存该值。也就是说,在启动时:

string programName = typeof(Program).Name;

然后在需要的地方使用programName

您展示的案例显然是一个人为的例子,因为我怀疑您担心几个Console.WriteLine调用的运行时效率。

如果没有更具体的例子,很难给出具体有用的建议。