SQL代码是否比C#代码快?
|
几个月前,我开始在这个编程公司工作。他们使用的一个实践是在SQL而不是C#中尽可能多的工作。 所以,让我说我有一个简单的例子来编写一些文件的列表: 是这样的: string SQL = @"
SELECT f.FileID,f.FileName,f.FileExtension,'/files/' + CAST(u.UserGuid AS VARCHAR(MAX)) + '/' + (f.FileName + f.FileExtension) AS FileSrc,FileSize=
CASE
WHEN f.FileSizeB < 1048576 THEN CAST(CAST((f.FileSizeB / 1024) AS DECIMAL(6,2)) AS VARCHAR(8)) + ' KB'
ELSE CAST(CAST((f.FileSizeB / 1048576) AS DECIMAL(6,2)) AS VARCHAR(8)) + ' MB'
END
FROM Files f
INNER JOIN Users u
ON f.UserID = u.UserID
";
// some loop for writing results {
// write...
// }
更快或更好,这样的东西: string SQL = @"
SELECT u.UserGuid,f.FileID,f.FileSizeB
FROM Files f
INNER JOIN Users u
ON f.UserID = u.UserID";
// some loop for writing results {
string FileSrc = "/Files/" + result["UserGuid"] + "/" + result["FileName"] + result["FileExtension"];
string FileSize = ConvertToKbOrMb(result["FileSizeB"]);
// write...
// }
这个特定的代码并不重要(这只是一些基本的例子)…问题是关于这种事情一般来说,最好是在SQL或“正常”代码上加载更多的负载? 解决方法这只是一个糟糕的编程习惯。您应该分离和隔离程序的不同部分,以便将来维护(想想下一个程序员!)性能 许多解决方案的糟糕的DB性能,所以大多数开发人员通常会限制SQL数据库访问到最小的事务可能。理想地,将原始数据转换为人类可读的形式应该在可能的最后一点发生。此外,非格式化数据的内存使用量要小得多,而内存便宜,您不应该浪费它。要缓冲,缓存和传输的每个额外字节都占用时间,并减少可用的服务器资源 例如对于Web应用程序格式化,应由JSON数据包中的本地JavaScript模板完成。这减少了后端SQL数据库和应用程序服务器的工作量,并减少了需要通过网络传输的数据,所有这些都加速了服务器性能 格式化和本地化 许多解决方案对于相同的事务具有不同的输出需求,例如不同的视图,不同的地理位置等。通过将形成嵌入到SQL事务中,您将不得不为每个本地化创建一个新的事务,这将成为一个维护噩梦 还可以将格式化的事务用于API接口,您还需要另外一套API接口的事务,该接口将无格式化 使用c#,您应该使用经过良好测试的模板或字符串处理库,或至少string.Format(),不要使用”运算符与字符串,这是非常慢 分享负载 大多数解决方案都有一个DB的多个客户端,因此客户端格式化负载与多个客户端CPU共享,而不是单个SQL数据库CPU 我非常怀疑SQL比c#快,你应该执行一个简单的基准测试,并在这里发布结果:-) (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
