编译器是否会优化相当格式化的字符串,或者该代码是否会比没有以可读方式划分的字符串运行得慢?
例如
string sql =
"select * " +
"from person " +
"where id = :id";
或
string sql = "select * from person where id = :id";
这只是一个小例子。你知道sql有多复杂。
答案 0 :(得分:13)
只需使用: -
string sql =
@"select *
from person
where id = :id";
这是从编译器的角度来看,与单行解决方案相同。虽然我不会惊讶地看到编译器优化了文字字符串的串联。然而,串联方法的常见问题是忘记在字符串末尾包含空格。
答案 1 :(得分:10)
您可以使用简单的程序对此进行测试:
Console.WriteLine("a" + "b");
使用reflector,您可以轻松地反汇编生成的二进制文件。在发布模式下,生成的IL为:
L_0000: ldstr "ab"
L_0005: call void [mscorlib]System.Console::WriteLine(string)
因此.NET确实优化了“非常格式化的字符串”。
答案 2 :(得分:7)
您可以使用
string s = @"SELECT *
FROM person
WHERE id = :id";
答案 3 :(得分:6)
字符串常量在编译时折叠,因此上面的两个代码片段基本相同。
内联SQL字符串是否是一个好主意完全是另一回事......
答案 4 :(得分:6)