ASP.Net:紧密循环在表示层

时间:2009-06-16 03:03:33

标签: asp.net for-loop

对于单个Web请求,我们从外部系统获取超过1000行数据,我们需要在将数据显示给最终用户之前将数据重新格式化为更好的表示格式在网页上。

当我们遍历ASPX页面中的数据时,它正在创建一个占用超过95%CPU的硬循环(或紧密循环?)。

我们如何避免CPU峰值并尽快完成流程? TIA

3 个答案:

答案 0 :(得分:4)

  1. 购买更快的服务器
  2. 购买更多服务器
  3. 少做工作
  4. 你在这里重复任何努力吗?对于相同数据的后续请求,它是否相同的1000行?那么也许你应该缓存结果?有些计算是一样的,一遍又一遍?那么也许您应该将计算结果与原始数据一起存储。

    底线:不要在表示层中进行紧密循环。它不属于那里。

    这也会损害您的可扩展性,BTW。你正在绑定可能正在处理其他请求的工作线程,也许其他请求不会处于紧密的CPU循环中。

答案 1 :(得分:1)

以John的#3为基础,你真的需要1000行数据吗?这听起来很多。用户不会理解必须手动排序。考虑提供分页或搜索功能,以减少屏幕上显示的数量。如果您已经将其编译为较少数量的记录,则可以在数据库中更有效地执行此操作。

答案 2 :(得分:1)

除非你做了很多真正复杂的事情,否则我会想知道你是怎么注意到你的CPU在很短的时间内仅仅运行了1000行。你可以在很短的时间内在现代服务器上做一些认真的工作,只要数据已经在内存中(听起来就像你的情况一样)。

在使用字典时,你是否正在重复迭代项目(即嵌套循环)?仔细看看你正在做什么,并考虑每行代码实际运行的次数。

我上周工作的一些代码必须评估大约500,000个对象的一系列复杂安全规则。结束代码运行大约需要3.5分钟 - 从DB加载2分钟,处理10秒,以及将结果写入结果文件1分20秒。一旦你拥有了内存中的每一个,如果你确保不会将数据循环超过你需要的次数,那么事情可能会非常快。