Ale*_*lex 6 c# string-concatenation
这可能听起来很愚蠢,但......
当我创建大SQL命令时,我想保持我的代码可读,我这样做:
cmd.CommandText = "SELECT top 10 UserID, UserName " +
"FROM Users " +
"INNER JOIN SomeOtherTable ON xxxxx " +
"WHERE UserID IN (blablabla)";
Run Code Online (Sandbox Code Playgroud)
看到连接?现在,为了保存性能,我现在这样做:
cmd.CommandText = @"SELECT top 10 UserID, UserName
FROM Users
INNER JOIN SomeOtherTable ON xxxxx
WHERE UserID IN (blablabla)";
Run Code Online (Sandbox Code Playgroud)
它使代码可读,但保存了连接.现在它真的能保存任何性能,或者编译器是否足够智能"预连接"第一个字符串?
Dar*_*rov 10
是的,编译器足够智能以优化常量字符串连接.为了证明这一点,我们来看看以下方法:
public static string Concat()
{
return "a" + "b";
}
Run Code Online (Sandbox Code Playgroud)
在发布模式下编译,产生以下IL:
.method public hidebysig static string Concat() cil managed
{
.maxstack 8
L_0000: ldstr "ab"
L_0005: ret
}
Run Code Online (Sandbox Code Playgroud)
注意优化.因此,就性能而言,两种方法都是相同的.唯一的区别是,在第二种情况下,你将在字符串中获得新行(\ r \n),因此它们不会产生完全相同的字符串,但SQL Server也足够聪明:-)
是的,编译器将在编译时计算常数和字符串的arithemetical操作.但是,回答这样的性能问题的更好方法是自己尝试.拿出StopWatch类,双向编写代码,循环运行十亿次,然后你就会知道.