[英]Pretty format sql in .NET code, performance?
编译器是否会优化相当格式化的字符串,或者该代码的运行速度是否比未以可读方式划分的字符串运行得慢?
例如
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");
使用反射器 ,您可以轻松地反编译生成的二进制文件。 在发布模式下,生成的IL是:
L_0000: ldstr "ab"
L_0005: call void [mscorlib]System.Console::WriteLine(string)
所以.NET确实优化了“非常格式化的字符串”。
您可以使用
string s = @"SELECT *
FROM person
WHERE id = :id";
字符串常量在编译时折叠,因此上面的两个代码片段基本相同。
拥有内联SQL字符串是否是一个好主意完全是另一回事......
啊 - C#的永恒真理之一。 哪个更好,使用+连接字符串的代码或不连接字符串的代码? 在您的情况下,答案取决于您使用的.NET版本.NET1到目前为止只能在单个语句中优化+字符串。 单个字符串中的+太多导致性能较差,因为编译器不得不求助于创建新的字符串实例来处理其他字符串部分。 从.NET 2开始,体系结构略有改变,编译器将多个+语句无缝连接在一起。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.