我的 .NET Core 博客性能优化经验补充

点击上方蓝字关注“汪宇杰博客”

导语

去年年底我写了一篇《我的 .NET Core 博客性能优化经验总结》,但后来还发现有一处遗漏需要补充。我们一起来看看~

牺牲空间换时间

我们知道软件设计只有高手才能做到又小又快,像我这种普通程序员通常只有两种方案:牺牲时间换空间、牺牲空间换时间。那么在需要追求性能的情况下,可以做一些空间上的牺牲。例如,数据库可以保存冗余数据。

牺牲数据库空间

在我博客中,我需要在文章列表页面显示内容摘要,这个摘要来源于整篇文章的前400字。在我的旧版 .NET Framework 博客里,这个操作每次都是 SELECT 完整文章内容后用 Substring() 截取前400字,由于用了 EF,很难在 SQL 里完成这个截取,因此白白消耗了很多时间和网络传输成本。而在 .NET Core 重写的博客中,我调整了这个设计,在文章表里新加了一列,专门用于存储前400字的文章摘要,而摘要的内容会在新写文章或者编辑文章的时候计算完成并存储到数据库,这样我显示文章列表的时候就不需要去 SELECT 完整的文章内容。虽然这样的设计严格来说肯定不满足数据库的那些个范式,但充分提高了此处的性能。

在企业系统里,这种做法也比较常见。如果有开销比较大的计算才能得出的结果,并且结果不会变,那么不需要每次都去算,而设计成算完就存储在数据库里,以提高性能。

牺牲文件系统空间

我博客中,RSS/ATOM/OPML 等订阅源在以前也需要每次都去数据库取数据计算完成后,输出到客户端。然而这类数据也有个特性,就是几乎不会变。于是我就设计成第一次用户访问的时候,将计算结果生成 XML 文件缓存到临时目录,那么后续用户访问的时候就不需要 hit 数据库了。仅当文章内容有修改的时候,drop 掉缓存的文件,让用户下次请求时重新生成。

本文小结

  1. 在系统设计中,不要过分遵守理论,比如数据库范式,要具体分析自己遇到的业务情况,并做调整,世界上没有可以完美复制的“最佳实践”,只有适合自己业务的才是最佳实践。

  2. 懒,越懒越好!充分分析业务,明确哪些数据不容易变,可以缓存就缓存,文件也好,内存也好,根据需要自己设计。能不要去调用数据库的就尽量不要去用,因为通常系统最慢的环节就是在调用不同的API和数据库通讯上。

其他性能优化事项欢迎参考前篇《我的 .NET Core 博客性能优化经验总结》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312199.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 OAS(OpenAPI标准)来描述 Web API

无论哪种类型的Web API, 都可能需要给其他开发者使用. 所以API的开发者体验是很重要的. API的开发者体验, 简写为 API DX (Developer Experience). 它包含很多东西, 例如如何使用API, 文档, 技术支持等等, 但是最重要的还是API的设计. 如果 API 设计的不好, 那么使用该API构建的…

dedemodule.class.php,DEDECMS5.7模块/模块管理列表显示空白问题解决方法

DEDECMS5.7模块/模块管理列表显示空白(站长基地配图)今天站长基地升级至dedecms最新版本,进入后台意外的发现,模块/模块管理一片空白,但有没有及时备份,于是赶紧去网上找寻解决办法,经过整理,大致有以下几种…

dotNET Core 中怎样操作AD(续1)

在之前的文章《dotNET Core 中怎样操作 AD?》中主要以AD的数据同步到数据库的场景来描述了在 dotNetCore 中怎样操作AD,本文将继续介绍一些在 dotNetCore 中操作 AD 的其他常用操作。环境dotNET Core:3.0Novell.Directory.Ldap.NETStandard2_…

【Magicodes.IE 2.0.0-beta1版本发布】已支持数据表格、列筛选器和Sheet拆分

为了更好的完善Magicodes.IE,春节期间我们会进行一次大的重构。由于精力有限,急缺文档和翻译(将文档翻译为英文文档)支持,诚邀各位加入。同时在功能方便也做了相关规划,有兴趣的朋友可以参与提交PR。https:…

Mbp,一个用于学习.net core的开发框架

Mbp(https://github.com/mbpframework/Mbp)是一个.net core 3的企业级web开发框架,是我个人用于学习.net core而发起的一个开源项目.这个借鉴了国外优秀开源项目abp vnext,及国内优秀开源框架Osharp的一些思想和实现.欢迎各路开发爱好者加入这个项目,一起学习,一起玩耍,共同成长…

什么?原来C#还有这两个关键字

系列介绍简介【五分钟的dotnet】是一个利用您的碎片化时间来学习和丰富.net知识的博文系列。它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net知识等等。场景您可以在下班坐地铁的时候,拿出…

蓝桥杯2015初赛-三羊献瑞-枚举

题目描述 观察下面的加法算式: 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。 请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。 输出 请你填写“三羊献瑞”所代表…

如何利用Serilog的RequestLogging来精简ASP.NET Core的日志输出

这是该系列的第一篇文章:在ASP.NET Core 3.0中使用Serilog.AspNetCore。第1部分-使用Serilog RequestLogging来简化ASP.NET Core的日志输出(本篇文章)第2部分-使用Serilog记录所选的端点名称[敬请期待]第3部分-使用Serilog.AspNetCore记录MVC…

net下的高性能轻量化半自动orm+linq的《SqlBatis》

一、项目介绍该项目内置单表linq操作,xml动态sql解析,词法分析,类型映射等功能。SqlMapper,用来处理sql与数据库操作,它设计的目标是支持mysql,sqlserver,sqllite,pgsql等.TypeMapper用于完成将数据库的字段类型映射到C#类型&…

如何快速融入团队(六)

作者:邹溪源,长沙资深互联网从业者,架构师社区特邀嘉宾!一我总是在记忆深处探访那些拥有高效率团队的一切特征,并试图从纷繁复杂的记忆尘埃中找出一些共性,庆幸我已经习惯于通过阅读和思考来解读这些内容&a…

临近年关,修复ASP.NET Core因浏览器内核版本引发的单点登录故障

临近年关,咨询师提出360、搜狗急速浏览器无法单点登录到公司核心产品WD: 重定向过多。现象经过测试, 出现单点登陆故障的是搜狗、360等双核浏览器(默认使用Chrome内核), 较新式的Edge、Chrome、Firefox均未出现此障碍。Developer tool监测不到…

Asp.Net Core 已支持 gRPC-Web !!

grpc-dotnet 项目在 PR #695 完成了 ASP.NET Core 服务与 .NET Core gRPC 客户端的 gRPC-Web 实现。虽然目前还是实验性项目,但是并不阻碍我们为之兴奋。下面我们来看看如何使用。gRPC-Web 简介gRPC-Web 允许从浏览器应用程序使用 gRPC,gRPC-Web 支持在新…

蓝桥杯2017初赛-打印大X-找规律

题目描述 小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度。 为了便于比对空格,所有的空白位置都以句点符来代替。 要求输入两个整数m n,表示笔的宽度,X的高度。 输入 输入存在多组数据 …

蓝桥杯2015决赛-方格填数-枚举 or dfs

题目描述 在2行5列的格子中填入1到10的数字。 要求:相邻的格子中的数,右边的大于左边的,下边的大于上边的。 如下图所示的2种,就是合格的填法。 请你计算一共有多少种可能的方案。 输出 请输出该整数,不要输出任何多…

【实战 Ids4】║ 在Swagger中调试认证授权中心

回家的路上照顾好自己哟~大家好,老张已经顺利到家啦,闲的无事写两篇文章冒个泡吧,其实写的内容都是群友提出来的问题,简单的我会在群里直接提供思路,麻烦的我就写个文章说明一下吧,也是自己的一个记录作用&…

linux 集群 java,Linux Tomcat 集群 利用记实1--搭建javaWeb运行情况

前段时候一向在搞linux,有很多多少工具只曩昔没有做过。影象不是那么深刻,此刻把历程记实下来,以备今后盘问。一:起首说一下我们的计划, 一共有六台办事器,此中两台安置Oracle 10g做数据库集群(这个不在这篇…

在 Blazor WebAssembly 中使用 gRPC-Web

对于单页面应用程序,gRPC-Web 是 JSON-over-HTTP 的一种方便、高性能的替代方案。如果你已经了解关于 gRPC 和 gRPC-Web 的一切,你可以跳到 添加 gRPC 服务到一个Blazor WebAssembly 应用程序 一节。如果你只是想要一些简单的 Blazor WebAssembly gRPC-…

【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发...

《ASP.NET Core 微服务实战》译者序:https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-translator/“微服务”的概念在 2014 年正式提出之后,越来越多的团队开始用它来设计自己的业务系统,各种微服务框架和开发过程管理…

.NET Core验证ASP.NET密码

.NET Core验证ASP.NET密码随着 .NETCore的持续更新和完善,越来越多的机构已经选择或者升级为 .NETCore。但由于技术不完全相同,不可能所有应用/数据库都能无缝迁移,因此 ASP.NETCore和传统 ASP.NET之间多少会存在一些挑战,需要更多…

linux下I2C驱动发送IO时序,I2C驱动情景分析——怎样控制I2C时序

内核版本:linux-3.4.2源程序: linux-3.4.2\drivers\i2c\busses\I2c-s3c2410.c这次要解决的问题是:如何配置soc的I2C模块,输出想要的时序波形?关于Linux里I2C驱动的架构,在转载的文章讲得相当透彻(《linu…