我正在设计一个ASP.NET应用程序,它构建了一段时间内每个合作伙伴的所有销售概览。 到目前为止它是如何工作的:
等等
现在问题是:如果我只选择TOP 100 partnerNo,如果需要一段时间,但我得到一个结果。如果我将TOP更改为1000,则SQL-Server将处理SQL语句 (可以看到他在activitymonitor中工作),iis-server正在为他提供新的SQL-Selects ......但是过了一段时间,iis正在终止浏览器的页面请求,所以没有显示结果
我真的希望,我可以解释一下,有人帮助我。
关于
Dirk Th。
答案 0 :(得分:2)
那是RBAR anti-pattern。应该可以创建一个返回所有合作伙伴的汇总信息的SQL查询。
这通常要快得多:数据越少越好,而且频率越低。到数据库的往返可能花费50毫秒。如果您执行其中的600次,则网页超时时间为30秒。
答案 1 :(得分:0)
如果您有Framework 4.5,并且获取每个partnerN的摘要数据是互斥的,您可以尝试并行任务。
http://msdn.microsoft.com/en-us/library/dd460720.aspx
现在,这不是一个简单的主题。但它可以让你利用多个处理器。
第一条规则。你不能依赖于序列。
........
选项2,更“传统”的方法是在数据库中找到您需要的一切。 我会放弃DataTables,并开始使用DTO或POCO对象。
然后,您可以创建替换计算/派生数据表列的迷你“只读属性”。
转到数据库,不要使用游标或循环,并点击数据库以获取所需的所有信息。把它拿回后,把它放到DTOs / POCO中依赖于只读属性你可以(对于派生值)..........然后如果你必须运行一些业务逻辑来弄明白一些派生值,然后这样做。
如果您对表示层的DataSet / DataTable“卡住”,您可以循环遍历DTO / POCO并将它们填充到DataSet / DataTable中。