我有一个.Net 3.5 windows应用程序。其中一个模块使用Oracle存储过程将一个记录集返回给C#客户端。
我只是想知道哪一个是以下两个中更好的方法[wrt。代码可读性和性能。]:
1.如果我在存储过程(SP)本身写了一个多CASE语句,那么记录集的数量大约是125.这里,SP的代码看起来有点乱。但是在积极的一面,行数返回给客户的人少了。
2.如果我不使用CASE语句,则记录集计数为@ 375。在这种方法中,我将把SP的“case”逻辑移到C#middler层......可能正在使用LINQ / delegates。 .. 这里,SP代码更干净,但返回的记录数量很高。
那么,我应该采用方法1还是2?
感谢阅读。
答案 0 :(得分:4)
让数据库存储过程返回太多数据然后让中间层/客户端进程从容器中取出是不好的策略。这不仅仅是因为该过程会花费比过滤数据库中的结果集更长的时间来惩罚用户,但它会不必要地消耗可用于满足其他用户活动的资源(网络带宽,应用服务器周期)。
“在这里,SP代码更干净但是 返回的记录数量很高。“
代码卫生是旁观者的眼睛。我更喜欢拥有自己正确的程序单元,而不是依靠外部流程来使事情正确。特别是驻留在其他建筑层上的外部流程。
答案 1 :(得分:0)
这取决于服务器负载和安全策略。 我更喜欢1),但如果你需要一个真正可用的sql服务器,你应该更喜欢2)以点亮sql server加载。