一、通常的性能问题类型

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

二、语言的考虑

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

    在asp.net core 3.0 中,如果直接在Controller中返回 Jobject 类型,会抛出如下错误: The collection type 'Newtonsoft.Json.Linq ...

  2. Delphi中的Val函数和iif函数(出错的时候,会有索引值)

    在delphi中Val是一个将字符串转换为数字的函数,Val(S; var V; var Code: Integer)第一个参数是要转换的字符串,第二个参数存放转换后的数字,可以是整数或浮点数,第三个 ...

  3. QString 转换为 char *

    一.QString 转换为 char * 将 QString 转 char *,需要用到 QByteArray 类,QByteArray 类的说明详见 Qt 帮助文档. 因为 char * 最后都有一 ...

  4. 使用Pandas加载数据

    1.dataframe对象简述: dataframe为pandas中一种有行列索引的二维数据结构,可以看成在普通二维结构上加上行列id标记 示例为创建一个2X3的dataframe: import s ...

  5. HBase 分裂(split)

    1. 为什么split 最初一个Table 只有一个region(因此只能存放在一个region server上).随着数据的不断写入,HRegion越来越大,当到达一定程度后分裂为两个,通过负载均衡 ...

  6. 基于MIG IP核的DDR3控制器(二)

    上一节中,记录到了ddr控制器的整体架构,在本节中,准备把ddr控制器的各个模块完善一下. 可以看到上一节中介绍了DDR控制器的整体架构,因为这几周事情多,又要课设什么的麻烦,今天抽点时间把这个记录完 ...

  7. 百度DMA+小度App的蓝牙语音解决方案技术难点解析

    前记   你平时在商场看到的语音助手,看起来非常的简单,其实,这个小小语音助手的背后,是一个非常的复杂的技术支撑.从前端到后端的技术依次是:前端语音降噪技术,高效的音频编解码技术,蓝牙双模技术,DMA ...

  8. Asp.net Core Session 存储任意对象

    using Microsoft.AspNetCore.Http; using Newtonsoft.Json; public static class SessionExtensions { publ ...

  9. Go网络文件传输

    流程分析 借助TCP完成文件的传输,基本思路如下: 发送方(客户端)向服务端发送文件名,服务端保存该文件名. 接收方(服务端)向客户端返回一个消息ok,确认文件名保存成功. 发送方(客户端)收到消息后 ...

  10. java socket通讯

    本来是打算验证java socket是不是单线程操作,也就是一次只能处理一个请求,处理完之后才能继续处理下一个请求.但是在其中又发现了许多问题,在编程的时候需要十分注意,今天就拿出来跟大家分享一下. ...