编译器是否会优化漂亮格式化的字符串,还是说相比于没有分成易读方式的字符串,该代码将运行得更慢?
例如:
string sql =
"select * " +
"from person " +
"where id = :id";
或者
string sql = "select * from person where id = :id";
这只是一个小例子。你知道SQL可以变得多么复杂。
编译器是否会优化漂亮格式化的字符串,还是说相比于没有分成易读方式的字符串,该代码将运行得更慢?
例如:
string sql =
"select * " +
"from person " +
"where id = :id";
或者
string sql = "select * from person where id = :id";
这只是一个小例子。你知道SQL可以变得多么复杂。
只需使用:
string sql =
@"select *
from person
where id = :id";
从编译器的角度来看,这与单行解决方案相同。尽管我不会感到惊讶,如果编译器优化了文字字符串的连接方式。然而,使用连接方法时常见的陷阱是忘记在字符串末尾包含空格。
你可以使用一个简单的程序来测试:
Console.WriteLine("a" + "b");
使用Reflector,您可以轻松地反汇编生成的二进制文件。在发布模式下,它所生成的中间语言代码(IL)如下:
L_0000: ldstr "ab"
L_0005: call void [mscorlib]System.Console::WriteLine(string)
所以.NET会优化“漂亮格式的字符串”。
您可以使用
string s = @"SELECT *
FROM person
WHERE id = :id";
字符串常量在编译时折叠,因此上面的两个代码片段本质上是相同的。
然而,是否将内联SQL字符串作为一种好的做法则完全是另一个问题...