一、通常的性能问题类型

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

二、语言的考虑

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

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

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

三、性能问题的类别

1.延迟

内存延迟

网络延迟

磁盘IO延迟

繁琐的交互/握手

2.带宽

过载的负荷

未优化的数据

压缩的平衡

3.计算问题

工作于过于大量的数据

计算非必须的结果

暴力的算法

4.响应

可离线处理的同步操作

缓存及处理作废的数据

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

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

得分了)。

  移动电话数据连接可能更适合文本文件。 虽然这是一个人为的例子,但是同样的问题通常适用于计算堆栈的每一层,其时间差的数量级相似。 问题在于差异太快无法察觉,我们需要使用工具和科学来看待它们。

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

四、什么时候性能是重要的

  性能并不总是很重要。知道什么时候是重要的,什么时候不重要,是非常必要的技能。一般的经验法则是,如果用户需要花事件来等待事情发生,那么就应该让性能良好。如果可以异步执行对用户没有影响,就可以按照异步地方式执行,如:队列,或者其他非UI线程.

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

五、为什么常常没有发现性能问题

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

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

《ASP.NET Core 高性能系列》关于性能的闲聊的更多相关文章

  1. 《ASP.NET Core 高性能系列》致敬伟大的.NET斗士甲骨文!

    写在开始 三年前,曾写过一篇文章:从.NET和Java之争谈IT这个行业,当时遭到某些自认为懂得java就了不起的Javaer抨击, 现在可以致敬伟大的.NET斗士甲骨文了 (JDK8以上都需要收费, ...

  2. 《ASP.NET Core 高性能系列》关于.NET Core的配置信息的若干事项

    1.配置文件的相关闲话 Core自身对于配置文件不是必须品,但由上文分析可知ASP.NET Core默认采用appsettings.json作为配置文件,关于配置信息的优先等级 命令行>环境变量 ...

  3. 《ASP.NET Core 高性能系列》关于.NET Core的部署方式

    概述,.NET Core应用程序可以创建三种类型的部署:FDD SCD FDE 框架依赖的部署(FDD).顾名思义,框架依赖的部署(FDD)依赖于目标系统上是否存在.NET Core版本.由于.NET ...

  4. 《ASP.NET Core 高性能系列》ASP.NET Core的启动过程(1)

    一.一切从头开始 简述:知道事情的真相就应该从头 开始,下面我们代码先行 public class Program { public static void Main(string[] args) { ...

  5. 《ASP.NET Core 高性能系列》静态文件中间件

    一.概述 静态文件(如 HTML.CSS.图片和 JavaScript等文件)是 Web程序直接提供给客户端的直接加载的文件. 较比于程序动态交互的代码而言,其实原理都一样(走Http协议), ASP ...

  6. 《ASP.NET Core 高性能系列》环境(EnvironmentName)的设置

    一.概述 程序启动时Host捕获到环境相关数据,然后交由IEnvironment(传说要作废,但是觉得这个有设计点问题,因为.NET Core 非Web怎么处理?),然后交由IWebHostEnvir ...

  7. 《ASP.NET Core 高性能系列》Span<T>和Memory<T>

    一.Span<T>概述 原文:Provides a type- and memory-safe representation of a contiguous region of arbit ...

  8. 跟我学: 使用 fireasy 搭建 asp.net core 项目系列之三 —— 配置

    ==== 目录 ==== 跟我学: 使用 fireasy 搭建 asp.net core 项目系列之一 —— 开篇 跟我学: 使用 fireasy 搭建 asp.net core 项目系列之二 —— ...

  9. 【译】ASP.NET Core 6 中的性能改进

    原文 | Brennan Conroy 翻译 | 郑子铭 受到 Stephen Toub 关于 .NET 性能的博文的启发,我们正在写一篇类似的文章来强调 6.0 中对 ASP.NET Core 所做 ...

随机推荐

  1. 如何在很短的时间内将大量数据插入到ConcurrentHashMap(转)

    将大批量数据保存到map中有两个地方的消耗将会是比较大的:第一个是扩容操作,第二个是锁资源的争夺.第一个扩容的问题,主要还是要通过配置合理的容量大小和扩容因子,尽可能减少扩容事件的发生:第二个锁资源的 ...

  2. <Codeforce>1082A. Vasya and Book

    题目描述: Vasya is reading a e-book. The file of the book consists of nn pages, numbered from 11 to nn. ...

  3. 苹果IOS 证书申请及导出证书文件

    在申请证书之前,前提是,你要注册一个苹果帐号,且交了个人或公司帐号99美元大概人民币600多一年费用申请开发者帐号,审核通过的开发者帐号,个人或公司或企业类型帐号. 如何申请苹果开发者帐号,这里不讲解 ...

  4. Struts2 注释类型

    Struts 2 应用程序可以使用Java5注释作为替代XML和Java属性配置.这里是清单的不同的类别有关的最重要的注解: 命名空间注释(动作注释): @ Namespace注释允许在Action类 ...

  5. 线程的通信与协作:sleep、wait、notify、yield、join关系与区别

    一.sleep.join.yield.wait.notify.notifyAll 1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁.也 ...

  6. springboot 文件上传及java使用post请求模拟文件上传

    参考自:https://blog.csdn.net/qq_25958999/article/details/83988974 接收端Controller类中方法: @RequestMapping(va ...

  7. 【C++】CCFCSP201803-1跳一跳

    // // main.cpp // CCFCSP20180318_1_跳一跳 // // Created by T.P on 2018/3/23. // Copyright © 2018年 T.P. ...

  8. Python第一天哇

    iDLE的清除方法ctrl+: 当然,你首先要把网上百度到那个文件按照步骤加上去啦  我百度的=-=:https://www.cnblogs.com/stuqx/p/7291933.html Pyth ...

  9. 腾讯自研万亿级消息中间件TubeMQ为什么要捐赠给Apache?

    导语 | 近日,云+社区技术沙龙“腾讯开源技术”圆满落幕.本次沙龙邀请了多位腾讯技术专家围绕腾讯开源与各位开发者进行探讨,深度揭秘了腾讯开源项目TencentOS tiny.TubeMQ.Kona J ...

  10. spring boot集成jsp

    我们在使用spring boot进行web项目开发的时候,可能会选择页面用jsp.spring boot默认使用的html的,现在我们来看下如何集成jsp页面进行开发. 1.pom.xml文件引入所需 ...