没有合适的资源?快使用搜索试试~ 我知道了~
智能客户端应用程序性能
需积分: 0 9 下载量 33 浏览量
2008-02-29
10:42:54
上传
评论
收藏 203KB DOC 举报
温馨提示
试读
27页
智能客户端应用程序性能
资源详情
资源评论
资源推荐
如何智能客户端应用程序性能
智能客户端应用程序性能
发布日期: 08/20/2004 | 更新日期: 08/20/2004
智能客户端体系结构与设计指南
David Hill、Brenton Webster、Edward A. Jezierski、Srinath Vasireddy、Mohammad Al-
Sabt,Microsoft Corporation,Blaine Wastell Ascentium Corporation,Jonathan Rasmusson
和 Paul Gale ThoughtWorks 和 Paul Slater Wadeware LLC
相关链接
Microsoft® patterns & practices 库
http://www.microsoft.com/resources/practices/default.mspx
.NET
的应用程序体系结构:设计应用程序和服
务
http://msdn.microsoft.com/library/en-us/dnbda/html/distapp.asp
摘要:本章讨论如何优化您的智能客户端应用程序。本章分析您可以在设计时采取的步骤,并介绍如何调
整智能客户端应用程序以及诊断任何性能问题。
本页内容
针对性能进行设计
性能调整和诊断
小结
参考资料
智能客户端应用程序可以提供比 Web 应用程序更丰富和响应速度更快的用户界面,并且可以利用本地系
统资源。如果应用程序的大部分驻留在用户的计算机上,则应用程序不需要到 Web 服务器的持续的往返
行程。这有利于提高性能和响应性。然而,要实现智能客户端应用程序的全部潜能,您应该在应用程序的
设计阶段仔细考虑性能问题。通过在规划和设计您的应用程序时解决性能问题,可以帮助您及早控制成本,
并减小以后陷入性能问题的可能性。
注改善智能客户端应用程序的性能并不仅限于应用程序设计问题。您可以在整个应用程序生存期中采取许
多个步骤来使 .NET 代码具有更高的性能。虽然 .NET 公共语言运行库 (CLR) 在执行代码方面非常有效,
但您可以使用多种技术来提高代码的性能,并防止在代码级引入性能问题。有关这些问题的详细信息,请
参阅 http://msdn.microsoft.com/perf。
在应用程序的设计中定义现实的性能要求并识别潜在的问题显然是重要的,但是性能问题通常只在编写代
码之后对其进行测试时出现。在这种情况下,您可以使用一些工具和技术来跟踪性能问题。
本章分析如何设计和调整您的智能客户端应用程序以获得最佳性能。它讨论了许多设计和体系结构问题
(包括线程处理和缓存注意事项),并且分析了如何增强应用程序的 Windows 窗体部分的性能。本章还
介绍了您可以用来跟踪和诊断智能客户端应用程序性能问题的一些技术和工具。
针对性能进行设计
您可以在应用程序设计或体系结构级完成许多工作,以确保智能客户端应用程序具有良好的性能。您应该
确保在设计阶段尽可能早地制定现实的且可度量的性能目标,以便评估设计折衷,并且提供最划算的方法
来解决性能问题。只要可能,性能目标就应该基于实际的用户和业务要求,因为这些要求受到应用程序所
处的操作环境的强烈影响。性能建模是一种结构化的且可重复的过程,您可以使用该过程来管理您的应用
程序并确保其实现性能目标。有关详细信息,请参阅 Improving .NET Application Performance and
Scalability 中的第 2 章“Performance Modeling”,网址为:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/
scalenetchapt02.asp。
智能客户端通常是较大的分布式应用程序的组成部分。很重要的一点是在完整应用程序的上下文中考虑智
能客户端应用程序的性能,包括该客户端应用程序使用的所有位于网络中的资源。微调并优化应用程序中
的每一个组件通常是不必要或不可能的。相反,性能调整应该基于优先级、时间、预算约束和风险。一味
地追求高性能通常并不是一种划算的策略。
智能客户端还将需要与用户计算机上的其他应用程序共存。当您设计智能客户端应用程序时,您应该考虑
到您的应用程序将需要与客户端计算机上的其他应用程序共享系统资源,例如,内存、CPU 时间和网络
利用率。
注有关设计可伸缩的高性能远程服务的信息,请参阅 Improving .NET Performance and
Scalability,网址为:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/
dnpag/html/scalenet.asp。本指南包含有关如何优化 .NET 代码以获得最佳性能的详细信息。
要设计高性能的智能客户端,请考虑下列事项:
•
在适当的位置缓存数据。数据缓存可以显著改善智能客户端应用程序的性能,使您可以在本地使用数据,而不必经常
从网络检索数据。但是,敏感数据或频繁更改的数据通常不适合进行缓存。
•
优化网络通讯。如果通过“健谈的”接口与远程层服务进行通讯,并且借助于多个请求/响应往返行程来执行单个逻辑操
作,则可能消耗系统和网络资源,从而导致低劣的应用程序性能。
•
有效地使用线程。如果您使用用户界面 (UI) 线程执行阻塞 I/O 绑定调用,则 UI 似乎不对用户作出响应。因为创建和
关闭线程需要系统开销,所以创建大量不必要的线程可能导致低劣的性能。
•
有效地使用事务。如果客户端具有本地数据,则使用原子事务可帮助您确保该数据是一致的。因为数据是本地的,所
以事务也是本地的而不是分布式的。对于脱机工作的智能客户端而言,对本地数据进行的任何更改都是暂时的。客户
端在重新联机时需要同步更改。对于非本地数据而言,在某些情况下可以使用分布式事务(例如,当服务位于具有良
好连接性的同一物理位置并且服务支持它时)。诸如 Web 服务和消息队列之类的服务不支持分布式事务。
•
优化应用程序启动时间。较短的应用程序启动时间使用户可以更为迅速地开始与应用程序交互,从而使用户立刻对应
用程序的性能和可用性产生好感。应该对您的应用程序进行适当的设计,以便在应用程序启动时仅加载那些必需的程
序集。因为加载每个程序集都会引起性能开销,所以请避免使用大量程序集。
•
有效地管理可用资源。低劣的设计决策(例如,实现不必要的完成器,未能在 Dispose 方法中取消终止,或者未能
释放非托管资源)可能导致在回收资源时发生不必要的延迟,并且可能造成使应用程序性能降低的资源泄漏。如果应
用程序未能正确地释放资源,或者应用程序显式强制进行垃圾回收,则可能会妨碍 CLR 有效地管理内存。
•
优化 Windows 窗体性能。智能客户端应用程序依靠 Windows 窗体来提供内容丰富且响应迅速的用户界面.您可以
使用多种技术来确保 Windows 窗体提供最佳性能。这些技术包括降低用户界面的复杂性,以及避免同时加载大量数
据。
在许多情况下,从用户角度感受到的应用程序性能起码与应用程序的实际性能同样重要。您可以通过对设
计进行某些特定的更改来创建在用户看来性能高得多的应用程序,例如:使用后台异步处理(以使 UI 能
作出响应);显示进度栏以指示任务的进度;提供相应的选项以便用户取消长期运行的任务。
本节将专门详细讨论这些问题。
数据缓存原则
缓存是一种能够改善应用程序性能并提供响应迅速的用户界面的重要技术。您应该考虑下
列选项:
•
缓存频繁检索的数据以减少往返行程。如果您的应用程序必须频繁地与网络服务交互以检索数据,则应该考虑在客户
端缓存数据,从而减少通过网络重复获取数据的需要。这可以极大地提高性能,提供对数据的近乎即时的访问,并且
消除了可能对智能客户端应用程序性能造成不利影响的网络延迟和中断风险。
•
缓存只读引用数据。只读引用数据通常是理想的缓存对象。此类数据用于提供进行验证和用户界面显示所需的数据,
例如,产品说明、ID 等等。因为客户端无法更改此类数据,所以通常可以在客户端缓存它而无须进行任何进一步的特
殊处理。
•
缓存要发送给位于网络上的服务的数据。您应该考虑缓存要发送给位于网络上的服务的数据。例如,如果您的应用程
序允许用户输入由在多个窗体中收集的一些离散数据项组成的定单信息,则请考虑允许用户输入全部数据,然后在输
入过程的结尾在一个网络调用中发送定单信息。
•
尽量少地缓存高度不稳定的数据。在缓存任何不稳定的数据之前,您需要考虑在其变得陈旧或者由于其他原因变得不
可用之前,能够将其缓存多长时间。如果数据高度不稳定并且您的应用程序依赖于最新信息,则或许只能将数据缓存
很短一段时间(如果可以缓存)。
•
尽量少地缓存敏感数据。您应该避免在客户端上缓存敏感数据,因为在大多数情况下,您无法保证客户端的物理安
全。但是,如果您必须在客户端上缓存敏感数据,则您通常将需要加密数据,该操作本身也会影响性能。
有关数据缓存的其他问题的详细信息,请参阅本指南的第 2 章 。另请参阅 Improving .NET Application
Performance and Scalability 的第 3 章“Design Guidelines for Application
Performance”(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/
html/scalenetchapt03.asp) 的“Caching”一节以及 Improving .NET Application Performance
and Scalability 的第 4 章“Architecture and Design Review of .NET Application for
Performance and Scalability”(http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/dnpag/html/scalenetchapt04.asp)。
网络通讯原则
您将面临的另一个决策是如何设计和使用网络服务,例如,Web 服务。特别地,您应该考虑与网络服务
交互的粒度、同步性和频率。要获得最佳的性能和可伸缩性,您应该在单个调用中发送更多的数据,而不
是在多个调用中发送较少量的数据。例如,如果您的应用程序允许用户在定单中输入多个项,则较好的做
法是为所有项收集数据,然后将完成的采购定单一次性发送给服务,而不是在多个调用中发送单个项的详
细信息。除了降低与进行大量网络调用相关联的系统开销以外,这还可以减少服务和/或客户端内的复杂
状态管理的需要。
应该将您的智能客户端应用程序设计为尽可能地使用异步通讯,因为这将有助于使用户界面快速响应以及
并行执行任务。有关如何使用 BeginInvoke 和 EndInvoke 方法异步启动调用和检索数据的详细信息,
请参阅“Asynchronous Programming
Overview”(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/
cpovrasynchronousprogrammingoverview.asp)。
剩余26页未读,继续阅读
wangtianyixiao
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0