c#发布优化未使用的字符串

时间:2017-05-10 17:19:36

标签: c# release

简单问题:

在VS20XX的发行版中是否完全没有完成字符串A和B的连接?

string A = // Dynamic string
string B = // Another Dynamic string

DoNothing(A+B);
...
void DoNothing(string MyString)
{
    #ifdef DEBUG
    // actual code here using MyString
    #endif
}

如果不清楚,我正在尝试创建一些调试探针,但我不希望消息的连接影响最终版本的性能...

1 个答案:

答案 0 :(得分:0)

您可以使用System.Diagnostics.ConditionalAttribute

实际完成此操作
[System.Diagnostics.Conditional( "Debug" )]
void DoNothing( string myString )
{
    // The #if DEBUG is no longer required in here
}

这实际上可以保证不会评估呼叫站点的参数。

然而,如果从单独的程序集中调用DoNothing(您的示例不使用访问修饰符,因此它不清楚预期的可见性是什么),行为DoNothing取决于调用者中定义的符号,而不是编译DoNothing时定义的符号。如果该方法最终是私有的或内部的,这并不重要。