《ASP.NET Core 高性能系列》关于性能的闲聊

1、一般的性能问题类型

让咱们一块儿看看那些公共的性能问题,看看他们是或者不是.咱们将了解到为何咱们经常在开发期间会错过这些问题.咱们也会看看当咱们考虑性能时语言的选择、延迟、带宽、计算等因素.算法

2、语言的考虑

  人们常常关注所使用的编程语言的速度。然而,这常常没有抓住要点。这是一个很是简单的观点,掩盖了技术选择的细微差异,用任何语言编写速度慢的软件都很容易。因为当今计算机的处理速度很是强大,因此解释性能相对较慢的语言一般足够快,而开发中性能的提升是值得的.要理解所涉及的论点和权衡是很重要的,即便在读完这本书以后您决定使用C#.NET.编程

  编写速度最快的软件的方法是深刻了解底层硬件并用汇编语言编写。(甚至机器代码)。开发、调试和测试都很复杂,这须要专家知识。咱们如今不多这样作,除了很是小的应用程序(如虚拟现实游戏、科学数据处理,有时还有嵌入式设备),一般只用于软件的一小部分.缓存

 C#在速度和灵活性之间提供了良好的平衡,使其适用于各类各样的应用程序,尤为是服务器端Web应用程序安全

3、性能问题的类别

1.延迟服务器

内存延迟网络

网络延迟架构

磁盘IO延迟框架

繁琐的交互/握手异步

2.带宽编程语言

过载的负荷

未优化的数据

压缩的平衡

3.计算问题

工做于过于大量的数据

计算非必须的结果

暴力的算法

4.响应

可离线处理的同步操做

缓存及处理做废的数据

  在为平台编写软件时,一般会受到两种资源的限制。即:计算处理速度和访问远程(处处理器)资源。处理速度现在不多是一个限制因素,这能够用于与其余资源进行交易,例如,压缩一些数据以减小网络传输时间。访问远程资源(如主内存,磁盘和网络)将产生各类时间成本。了解处理速度不是受单个值影响,而是多个参数影响很是重要。这些参数中带宽和延迟是最重要的,

  延迟是操做开始以前的滞后时间,而带宽是数据在操做开始后转移的速率。提交一个硬盘驱动事件的带宽是很是高的,也是具备很是高的延迟的。这会使来回发送大量文本文件变得很是慢,可是或许,发送大量3D视频是一个不错的选择(取决于Weissman

得分了)。

  移动电话数据链接可能更适合文本文件。 虽然这是一我的为的例子,可是一样的问题一般适用于计算堆栈的每一层,其时间差的数量级类似。 问题在于差别太快没法察觉,咱们须要使用工具和科学来看待它们。

  解决性能问题的秘诀是对该技术有更深刻的了解,并知道在较低级别会发生什么。 您应该了解框架在网络级别上的说明。 掌握这些命令如何在底层硬件上运行以及它们如何受到部署到的基础架构的影响也很重要。

4、何时性能是重要的

  性能并不老是很重要。知道何时是重要的,何时不重要,是很是必要的技能。通常的经验法则是,若是用户须要花事件来等待事情发生,那么就应该让性能良好。若是能够异步执行对用户没有影响,就能够按照异步地方式执行,:队列,或者其余非UI线程.

某些状况下,程序被设计为看起来缓慢,主要的缘由是为了系统安全,例如一些解密算法.

5、为何经常没有发现性能问题

  在开发中没有注意到性能问题的主要缘由之一是一些问题在开发系统上是不可感知的。在延迟增长以前可能不会出现问题。这多是由于大量的数据被加载到系统中而且检索特定的记录须要更长的时间。这也多是由于每一个系统被部署到单独的服务器上,从而增长了网络等待时间。另外当数据量没有上来,或者请求量没有上来,这些问题都是难以发现的.因此提早的压测是颇有必要的.

  当您从一开始就考虑性能时,解决问题的成本更低、速度更快。对于软件开发中的大多数问题来讲,这都是正确的。越早抓到BUG,越好。发现错误的最糟糕的时间是一旦部署,而后由用户报告。与功能性BUG相比,性能问题有点不一样,由于它们一般只在规模上显示出来,除非您去寻找它们,不然在实际部署以前您不会注意到它们。您能够编写集成测试和负载测试,以对照具体的量化目标检查性能,咱们将在本书后面讨论这些目标。

相关文章
相关标签/搜索