我正在审核一个网络应用程序已完成90%但速度非常慢,即使在本地环境(Web服务器和数据库)中,事务也可能需要5到10秒才能完成。这种延迟的原因是它在所有地方都使用了updatepanels,我的意思是99.9%的所有数据库交互。 我有什么选择来加速这个应用程序而不必重写整个应用程序?我的意思是我不介意在这里和那里改变一些东西,但是有很多功能依赖于这些交易(updatepanels)。
答案 0 :(得分:6)
根据经验,ViewState对UpdatePanels和AJAX的性能影响最大,因为每次往返时,ViewState中的所有数据都必须序列化并打包到XmlHttpRequest中并通过网络发送。
尽可能地减少ViewState(关闭控件,例如在aspx页面上定义的标签,并且在往返过程中不会改变 - 在这些上设置属性EnableViewState="False"
)
最小化UpdatePanel的范围。我的意思是尽可能减少面板内控件的数量。如果在ajax请求期间不需要更新某些控件,请将它们从UpdatePanel中取出以减少客户端开销。
考虑到默认情况下UpdatePanels是“已连接”的,这意味着在每次往返过程中,即使只需要更改一个面板,所有UpdatePanel也将运行其更新功能。要尝试使用UpdateMode="Conditional"
属性。然后,您将被迫触发多个面板,仅在必要时才更新。
这里有一个关于UpdatePanel用法的很好的讨论: One Update Panel vs. Multiple Update Panels
总的来说,我同意其他人的看法,似乎AJAX可能不是你唯一的问题。您可能希望分析应用程序和数据库性能,以确保您专注于正确的区域。
答案 1 :(得分:2)
Dave Ward在优化UpdatePanel方面有一个很好的article。您应该了解和使用的主要提示是:
Request["__EVENTTARGET"] == UpdatePanel1.ClientID
提示。PreRender
事件实际填充数据面板。因此,您将避免不必要的数据加载。但如果您的系统将来会承受很大的负担,那么最好使用Web服务设计它,而不是更新面板。
答案 2 :(得分:0)
您的问题有点不清楚更新面板内发生了什么。 Updatepanels本身通常不与DB通信或导致任何特定的减速。
您应该分析每个页面加载所做的sql查询(使用sql profiler,某些.NET分析器或只是在最常见的sql查询周围放置定时器)。
如果您使用的是Firefox和Visual Studio网络服务器,则可能需要在Firefox中禁用ipv6。您可以通过键入about:config if address bar并将“network.dns.disableIPv6”的值更改为“true”来执行此操作。