漂亮格式的.NET代码中的SQL,性能如何?

时间:2009-11-05 12:49:12

标签: c# .net sql performance

编译器是否会优化相当格式化的字符串,或者该代码是否会比没有以可读方式划分的字符串运行得慢?

例如

string sql = 
   "select * " +
   "from person " +
   "where id = :id";

string sql = "select * from person where id = :id";

这只是一个小例子。你知道sql有多复杂。

5 个答案:

答案 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)

啊,这是C#的永恒真理之一。哪个更好,使用+连接字符串的代码或不连接字符串的代码?在您的情况下,答案取决于您使用的.NET版本.NET1到目前为止只能在单个语句中优化+字符串。单个字符串中的+太多导致性能较差,因为编译器不得不求助于创建新的字符串实例来处理其他字符串部分。从.NET 2开始,架构略有改变,编译器将多个+语句无缝连接在一起。