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

kaz*_*aze 6 .net c# sql performance

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

例如

string sql = 
   "select * " +
   "from person " +
   "where id = :id";
Run Code Online (Sandbox Code Playgroud)

要么

string sql = "select * from person where id = :id";
Run Code Online (Sandbox Code Playgroud)

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

Ant*_*nes 13

只需使用: -

string sql = 
   @"select * 
     from person
     where id = :id";
Run Code Online (Sandbox Code Playgroud)

从编译器的角度来看,这与单线解决方案相同.虽然我不会惊讶地看到编译器优化了文字字符串的串联.然而,串联方法的常见问题是忘记在字符串末尾包含空格.


And*_*mar 10

你可以用一个简单的程序来测试它:

Console.WriteLine("a" + "b");
Run Code Online (Sandbox Code Playgroud)

使用反射器,您可以轻松地反编译生成的二进制文件.在发布模式下,生成的IL是:

L_0000: ldstr "ab"
L_0005: call void [mscorlib]System.Console::WriteLine(string)
Run Code Online (Sandbox Code Playgroud)

所以.NET确实优化了"非常格式化的字符串".


Adr*_*der 7

您可以使用

string s = @"SELECT *
FROM person
WHERE id = :id";
Run Code Online (Sandbox Code Playgroud)


Gre*_*ech 6

字符串常量在编译时折叠,因此上面的两个代码片段基本相同.

拥有内联SQL字符串是否是一个好主意完全是另一回事......


Pet*_*lon 6

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

  • 感谢downvote - 无论谁做到了.请解释为什么你认为这个答案是错误的,所以每个人都可以从中学习. (2认同)