闲话 .NET(3):.NET Framework 的缺点

image

前言

2016 年,微软正式推出 .NET Core 1.0,并在 2019 年全面停止 .NET Framework 的更新。

.NET Core 并不是 .NET Framework 的升级版,而是一个从头开始开发的全新平台,一个跟 .NET Framework 截然不同的开源技术框架。

微软为什么要这么做呢?今天我们来聊聊 .NET Framework 有什么缺点,导致微软做出如此艰难的决定。

缺点一

.NET Framework 属于系统级别安装的程序,操作系统内的所有基于 .NET Framework 开发的程序共享一个 .NET Framework 安装实例,如果其中一个应用程序需要升级 .NET Framework 或者为 .NET Framework 安装补丁,则其他程序也会受影响。

缺点二

.NET Framework 必须安装到操作系统上才能使用,不能和应用程序打包到一起独立部署,导致基于 .NET Framework 开发的应用程序必须在有正确的 .NET Framework 版本的环境里才能部署运行,这为应用程序的部署及升级带到很大的不便。

缺点三

ASP.NET 框架 和 IIS(internet information services,互联网信息服务)深度耦合。

ASP.N ET 只能运行在 IIS 上,而 IIS 只能运行在 Windows 操作系统上,不同的 Windows 版本的 IIS 版本也不同,而且 IIS 的安全性一直以来也备受争议,这些都深刻影响 .NET Framework 的推广和应用。

缺点四

性能问题,这可以说是 .NET Framework 最常被吐槽的一点了。

在 .NET Framework 诞生之初,ASP.NET 就等同于ASP.NET Web Forms,虽然它在 2009 年被 ASP.NET MVC 以及更晚出现的 ASP.NET Web API 所取代,但是微软在早期开发 ASP.NET 运行时的时候,在 ASP.NET 运行时中有很多专门为 ASP.NET Web Forms 编写的代码,虽然这些代码是 ASP.NET MVC、ASP.NET Web API 所不需要的,但是 ASP.NET MVC、ASP.NET Web API 也只能带着这些它们不需要的代码去运行,这导致 ASP.NET 在运行的时候有很多不必要的内存和 CPU 消耗,据估计,ASP.NET 程序在运行时占用的内存是它实际需要内存的 3 倍。举个例子,在 ASP.NET MVC 中,当用户请求到达 IIS 后,中间要经过非常多的处理管道,最后才能到达控制器。这些管道大多是硬编码的,即使用不到它们,也无法将它们移除,因此 ASP.NET 程序无法最大化地发挥硬件的性能。

缺点五

.NET Framework 诞生的时候是没有云计算的概念的,因此 .NET Framework 从创立之初其开发人员就没有考虑到程序会运行在云服务环境中,对很多.NET Framework 组件的设置都深度依赖 Windows 操作系统 API,这导致 .NET Framework 程序无法做到完全自治。

结语

随着软件行业的发展,系统的复杂性和访问量激增,传统的软件开发、部署模式已经力不从心。

比如很多电商网站在十几年前刚开始创建的时候,可能只有电商前台系统、后台管理系统、财务系统等少量的几个系统,由于用户量不多,几台服务器就能够支撑它们了。但是发展到如今,其系统数量已经成百上千了,服务器也有上万台。

因此,系统的开发、部署、运维等都和以前有了不同,云开发、容器化部署、微服务等概念也相应而生。

.NET Framework 是约 20 年前诞生的技术,并没有云基因,被基于云开发的技术所淘汰也是正常的,但这并不说明 .NET Framework 技术是过时的,事实上,.NET Framework 的很多技术都被迁移到 .NET Core 上,而且 .NET Framework 在工控行业、上位机开发等方面还是有很大的优势。

我是老杨,一个奋斗在一线的资深研发老鸟,让我们一起聊聊技术,聊聊人生。

都看到这了,求个点赞、关注、在看三连呗,感谢支持。

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

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

相关文章

一文详解手机在网状态查询API

手机在网状态查询就是指客户手机号码的在营运商数据库中标注的状态,有正常使用、停机、销号、未启用、异常、预销户、在网但不可用等一系列状态。而手机在网状态查询接口则是指通过接入api接口的实时数据对客户的手机号码开展在网状态查询。手机号码在网状态查询主要…

2024第三届AIGC开发者大会圆桌论坛:AI Agent中国落地发展现状及多模态结合具身智能的发展展望

在2024年第三届AIGC开发者大会上,多位业内专家齐聚一堂,共同探讨了AI Agent在中国的落地发展现状以及多模态结合具身智能的发展前景。本次圆桌论坛的嘉宾包括: Fast JP作者于金龙Agent创始人莫西莫必胜作者秦瑞January Agent创始人李晨 多模…

Android NDK系列(一)手动搭建Native Project

使用NDK编写的本地代码具有高性能等特性,在游戏、图形处理等领域有广泛应用,下面介绍如何手动搭建一个纯C版的Android项目,通过该项目可以理解Android的项目结构。 一、创建settings.gradle Android项目是基于Gradle构建的,首先得…

数据结构之链表(高级应用)

基本的算法实践在上一篇博文,这篇博文向大家详细展示一下数据结构的高级应用,可能有些难,但这是重点,实用性很强,而且用的好往往事半功倍,想获得力量吗,开整: 我把他们分为这几块&a…

Captura完全免费的电脑录屏软件

一、简介 1、Captura 是一款免费开源的电脑录屏软件,允许用户捕捉电脑屏幕上的任意区域、窗口、甚至是全屏画面,并将这些画面录制为视频文件。这款软件具有多种功能,例如可以设置是否显示鼠标、记录鼠标点击、键盘按键、计时器以及声音等。此…

JVM1.8分代的理论基础和简单测试

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…

用PHP封装一个强大且通用的CURL方法

用PHP封装一个强大且通用的CURL方法 支持:get、post、put、delete、patch、options 直接上代码: /*** function 强大且通用的cURL请求库* param $url string 路径* param $method string 请求方式 如&#x…

【Javascript】Promise形象比喻

我们可以把 Promise 形象地比喻为一个“外卖订单”,它有三种状态:下单中、已送达、已取消。这个比喻可以帮助你理解 Promise 的工作机制。 比喻解释 Pending(下单中): 当你在外卖平台上创建一个订单时,订…

c 函数指针的表现形式

1.概要 int&#xff08;*函数指针变量&#xff09;(int a,char b)&#xff0c;这里的函数指针变量就可以代码一个特定类型的函数指针 int&#xff08;*&#xff09;(int a,char b)就是这种函数指针的类型 2.代码 #include <iostream>void fun() {printf("fun\n&q…

海外仓系统哪家好?闭坑指南,擦亮眼睛选对系统

可以说现在的海外仓系统市场还是比较杂乱的&#xff0c;各种不同类型&#xff0c;不同收费标准的系统比比皆是&#xff0c;这让很多想引进海外仓系统的企业不知所措&#xff0c;不知道怎么选。 今天就聊一下在选择海外仓系统的时候应该如何考量&#xff0c;才能避免被坑&#…

JS分支语句

一 三元运算符 1 语法格式&#xff1a; 条件?满足条件执行代码1:不满足条件执行代码2 2 用途 三元运算符等价于简单的if else语句&#xff0c;常用于判断取值 二 switch语句 1 语法格式&#xff1a; swtich(数据){case 值1:执行语句breakcase 值2:执行语句breakcase 值…

C++之对象的使用

1、static成员 2、static成员优点 2、static成员函数 静态成员函数不能访问非静态成员原因&#xff1a;因为没有this指针。也不可以访问非静态成员函数。 可以通过对象来访问静态成员&#xff0c;但是不推荐这么使用&#xff0c;会让人误解成这个x_是属于对象的&#xff0c;但…

贪心算法典型题目

糖果 有n个小朋友&#xff0c;有m袋糖果&#xff0c;第i袋的糖果数量是a[i]。已知n<m<2n。 每个小朋友至少要有一袋糖果&#xff0c;至多只能要两袋糖果。 分配的目标是把这m袋糖果全部分完&#xff0c;而且要使得每个小朋友最终得到的糖果数量都是相等的。 如果可以…

“大一新生接单:专业打造单页HTML网站,让你的项目脱颖而出!”

我是大一新生&#xff0c;对HTML有浓厚的兴趣&#xff0c;并且已经掌握了一些基础知识。 学会了使用htmlcss的网页设计&#xff08;暂未学JavaScript&#xff09; 如果你需要代写的服务可以在本作品下方 评论留言

PyCharm基本配置内容

如何更换 Python 解释器 输入一段代码点击运行后&#xff0c;画面下方有一个路径如图中框中所示&#xff1a; 上面的路径为虚拟路径&#xff0c;可以改为我们自己设置的路径 点击设置&#xff0c;选择settings 选择Project&#xff1a;y002———》Python Interpreter&#…

C++课程设计实验杭州电子科技大学ACM题目(中)

题目四&#xff1a;2016.数据的交换输出 题目描述 Problem Description&#xff1a; 输入n(n<100)个数&#xff0c;找出其中最小的数&#xff0c;将它与最前面的数交换后输出这些数。 Input&#xff1a;输入数据有多组&#xff0c;每组占一行&#xff0c;每行的开始是一…

python爬虫之pandas库——数据清洗

安装pandas库 pip install pandas pandas库操作文件 已知在本地桌面有一名为Python开发岗位的csv文件(如果是excel文件可以做简单修改即可&#xff0c;道理是通用的) 打开文件&#xff1a; 打开文件并查看文件内容 from pandas import DataFrame import pandas as pd data_c…

【自动驾驶技术栈学习】2-软件《大话自动驾驶》| 综述要点总结 by.Akaxi

----------------------------------------------------------------------------------------------------------------- 致谢&#xff1a;感谢十一号线人老师的《大话自动驾驶》书籍&#xff0c;收获颇丰 链接&#xff1a;大话自动驾驶 (豆瓣) (douban.com) -------------…

nuxt3+Element Plus项目搭建过程记录

背景 本文只记录项目搭建过程中遇到的一些问题和关键点&#xff0c;nuxt框架的说明和API请参照官网学习 官网&#xff1a;https://nuxt.com/docs/getting-started/introduction 1. 初始化项目 指令如下: npx nuxilatest init <project-name>我在安装过程中出现报错&a…

本地源码方式部署启动MaxKB知识库问答系统,一篇文章搞定!

MaxKB 是一款基于 LLM 大语言模型的知识库问答系统。MaxKB Max Knowledge Base&#xff0c;旨在成为企业的最强大脑。 开箱即用&#xff1a;支持直接上传文档、自动爬取在线文档&#xff0c;支持文本自动拆分、向量化、RAG&#xff08;检索增强生成&#xff09;&#xff0c;智…