ASP.Net:表示层中的紧密循环

ASP.Net:表示层中的紧密循环,asp.net,for-loop,Asp.net,For Loop,对于单个web请求,我们从外部系统获取1000多行数据,我们需要将数据重新格式化为更好的表示格式,然后再将其显示在网页上给最终用户 当我们在ASPX页面中循环数据时,它创建了一个硬循环(或紧循环?),消耗了95%以上的CPU 我们如何避免CPU峰值,并尽可能快地完成进程?短暂性脑缺血发作 购买更快的服务器 购买更多服务器 少干活 你在这里重复努力吗?对于相同的数据,后续请求的1000行是否相同?那么也许你应该缓存结果?有些计算是一样的吗,一遍又一遍?然后,也许您应该将计算结果与原始数据一起存储

对于单个web请求,我们从外部系统获取1000多行数据,我们需要将数据重新格式化为更好的表示格式,然后再将其显示在网页上给最终用户

当我们在ASPX页面中循环数据时,它创建了一个硬循环(或紧循环?),消耗了95%以上的CPU

我们如何避免CPU峰值,并尽可能快地完成进程?短暂性脑缺血发作

  • 购买更快的服务器
  • 购买更多服务器
  • 少干活
  • 你在这里重复努力吗?对于相同的数据,后续请求的1000行是否相同?那么也许你应该缓存结果?有些计算是一样的吗,一遍又一遍?然后,也许您应该将计算结果与原始数据一起存储

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

    顺便说一句,这也损害了您的可伸缩性。您占用了可能正在处理其他请求的工作线程,可能其他请求没有占用紧凑的CPU循环

  • 购买更快的服务器
  • 购买更多服务器
  • 少干活
  • 你在这里重复努力吗?对于相同的数据,后续请求的1000行是否相同?那么也许你应该缓存结果?有些计算是一样的吗,一遍又一遍?然后,也许您应该将计算结果与原始数据一起存储

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


    顺便说一句,这也损害了您的可伸缩性。您占用了可能正在处理其他请求的工作线程,可能其他请求没有处于紧凑的CPU循环中。

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

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

    除非您正在执行许多非常复杂的工作,否则我想知道您是如何注意到CPU在一段明显的时间内只运行1000行。只要数据已经存在于内存中(在您的情况下听起来像是这样),您就可以在很短的时间内在现代服务器上做一些严肃的工作

    当使用字典时,您是否在重复迭代项(即嵌套循环)之类的操作会更好?仔细看看你在做什么,并考虑每行代码的实际运行次数。


    我上周编写的一些代码必须对大约500000个对象评估一系列复杂的安全规则。运行结束代码大约需要3.5分钟——从数据库加载需要2分钟,处理需要10秒,将结果写入结果文件需要1分20秒。一旦内存中有了所有内容,如果确保循环数据的次数不会超过需要的次数,那么速度可能会惊人地快。

    除非你在做很多非常复杂的事情,否则我想知道你是如何注意到你的CPU在相当长的一段时间内只运行1000行。只要数据已经存在于内存中(在您的情况下听起来像是这样),您就可以在很短的时间内在现代服务器上做一些严肃的工作

    当使用字典时,您是否在重复迭代项(即嵌套循环)之类的操作会更好?仔细看看你在做什么,并考虑每行代码的实际运行次数。


    我上周编写的一些代码必须对大约500000个对象评估一系列复杂的安全规则。运行结束代码大约需要3.5分钟——从数据库加载需要2分钟,处理需要10秒,将结果写入结果文件需要1分20秒。一旦内存中有了所有内容,如果确保循环数据的次数不会超过所需的次数,那么速度会惊人地快。

    由于CPU已满负荷,您唯一能做的就是优化算法(和代码)做你的局部变换-但是如果你的程序是完全CPU约束的,它可能正在做你想做的事情……因为你的CPU是满负荷的,你唯一能做的就是优化算法(和代码)做你的本地转换-但是考虑到如果你的程序是完全CPU约束的,它可能正在做你想做的事情……乔尔,我希望他必须在1000行上做很多处理,然后显示少于1000行。如果他真的显示了所有1000行,在对它们进行了大量压缩之后,那么,哎哟。@Joel,我希望他必须对1000行进行大量处理,然后显示的行数将大大少于1000行。如果他真的显示了所有1000个,在对它们进行了大量运算之后,那么,哎哟,Thx,我们目前正在考虑使用缓存解决方案。奇怪的是,为什么你说表示层中的紧循环是不正确的,在我们的例子中,循环是将数据格式化为更可呈现的格式(或者,如果需要,紧循环会进入哪一层?),而在ASP.NET程序中,它更是不正确的。在这个请求期间,您占用了一个稀缺的工作线程,几乎可以肯定,这项工作应该在其他地方完成。紧密的CPU循环在多大程度上受到请求细节的影响?请求是否更改了处理的1000行?请求是否更改