一、通常的性能问题类型

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

二、语言的考虑

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

    GFP_DMA 和 GFP_HIGHMEM 都有一个平台相关的角色, 尽管对所有平台它们的使用都 有效. Linux 内核知道最少 3 个内存区: DMA-能够 内存, 普通内存, 和高端内存. 尽管 ...

  2. linux 手动睡眠

    在 Linux 内核的之前的版本, 正式的睡眠要求程序员手动处理所有上面的步骤. 它是一 个繁琐的过程, 包含相当多的易出错的样板式的代码. 程序员如果愿意还是可能用那种方 式手动睡眠; <li ...

  3. CentOS服务器安装mysql

    1.配置YUM源 下载mysql源安装包 [root@localhost~]#wget http://dev.mysql.com/get/mysql57-community-release-el7-8 ...

  4. CSS 兼容问题

    CSS常见兼容性问题总结 浏览器的兼容性问题通常是因为不同的浏览器对不同的代码有不同的解析造成页面显示不统一的情况,这里的浏览器通常指IE 6,7,8,9... Google Firefox Oper ...

  5. HDU 6662 Acesrc and Travel (换根dp)

    Problem Description Acesrc is a famous tourist at Nanjing University second to none. During this sum ...

  6. Cookie的使用、Cookie详解、HTTP cookies 详解、获取cookie的方法、客户端获取Cookie、深入解析cookie

    Cookie是指某些网站为了辨别用户身份.进行session跟踪而存储在用户本地终端上的数据(通常经过加密),比如说有些网站需要登录才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的.那么我 ...

  7. 网易Java高级开发课程随笔

    java学习也有6个月之久,记录下课程相关知识点,目前我还没有掌握,so仅作技术点记录 鉴于在.NET上我封装了一套开发框架,虽去年按.NET封装的思路自己也弄了个java开发框架,还是感觉对java ...

  8. Joomla 3.9.13 二次注入分析(CVE-2019-19846)

    目录 前言 分析 更好的注入 利用 总结 补丁分析 前言 这一个需要管理员权限的二次SQL注入,利用起来比较鸡肋.这里仅分享一下挖洞时的思路,不包含具体的poc. 分析 漏洞触发点在component ...

  9. $CF888E\ Maximum\ Subsequence$ 搜索

    正解:$meet\ in\ the\ middle$ 解题报告: 传送门$QwQ$. 发现数据范围为$n\leq 35$,所以$2^{\frac{n}{2}}$是可做的. 所以先拆成$A,B$两个集合 ...

  10. 基于 Blazui 的 Markdown 编辑器 Blazui.Markdown 尝鲜

    想做一个文档平台用来存放和展示 Blazui 的文档,然后基于 Markdown 写文档,但缺一个好用的 Blazor Markdown 编辑器,所以就顺便写一个了,功能上基本抄的 https://p ...