0

我正在设计一个 ASP.NET 应用程序,它会在一段时间内构建每个合作伙伴的所有销售额的概览。到目前为止它是如何工作的:

  1. 选择所有合作伙伴No(SQL-Server)并添加到列表(ASP.NET)
  2. 选择一段时间内partnerNo1的销售额(SQL-Server),汇总它们(ASP.NET)并将它们添加到DataTable(ASP.NET)
  3. 选择一段时间内partnerNo2的销售额,汇总它们并将它们添加到数据表中
  4. 选择一段时间内的合作伙伴No3 的销售额,汇总它们并将它们添加到数据表中

等等

现在问题来了:如果我只选择 TOP 100 合作伙伴否,如果需要一段时间,但我会得到结果。如果我将 TOP 更改为 1000,SQL-Server 会处理 SQL-Statements(可以看到他在 activitymonitor 中工作),并且 iis-server 正在为他提供新的 SQL-Selects ......但过了一会儿,iis 是终止来自浏览器的页面请求,因此不显示任何结果

我真的希望,我可以解释它足以有人帮助我。

带着敬意

德克Th。

4

2 回答 2

2

这就是RBAR 反模式。应该可以创建一个返回所有合作伙伴汇总信息的 SQL 查询。

这通常要快得多:需要通过线路的数据更少,而且频率更低。到数据库的往返可能需要 50 毫秒。如果您执行其中的 600 次,那么您将处于 30 秒的网页超时时间。

于 2013-05-06T13:07:59.773 回答
0

如果您有 Framework 4.5,并且获取每个合作伙伴的摘要数据是互斥的,您可以尝试并行任务。

http://msdn.microsoft.com/en-us/library/dd460720.aspx

现在,这不是一个简单的主题。但这将允许您利用多个处理器。

第一法则。你不能依赖序列。

...........

选项 2,一种更“传统”的方法是访问数据库以获取所需的一切。我会放弃 DataTables,并开始使用 DTO 或 POCO 对象。

然后,您可以创作迷你“只读属性”来替换您的计算/派生数据表列。

转到数据库,不要使用游标或循环,并点击数据库以获取您需要的所有信息。取回后,将其填充到 DTO/POCO 依赖的只读属性中(对于派生值).......然后如果您必须运行一些业务逻辑来弄清楚一些派生值,然后执行此操作。

如果您“卡住”了表示层的 DataSet/DataTable,您可以循环遍历 DTO/POCO 并将它们填充到 DataSet/DataTable 中。

于 2013-05-06T13:46:26.077 回答