两者的比较 System.Text.Json: 官方, 高性能, 低内存, 默认行为严格, 相对不灵活, 支持源生成, AOT Newtonsoft.Json: 第三方, 性能较高, 功能丰富, 默认行为相对宽松, 强大的灵活性, 不支持源生成, 不能AOT System.Text.Json迁移至Newtonsoft.Json, 简单 Newtonsoft.Json迁移至System.Tex...
两者的比较 System.Text.Json: 官方, 高性能, 低内存, 默认行为严格, 相对不灵活, 支持源生成, AOT Newtonsoft.Json: 第三方, 性能较高, 功能丰富, 默认行为相对宽松, 强大的灵活性, 不支持源生成, 不能AOT System.Text.Json迁移至Newtonsoft.Json, 简单 Newtonsoft.Json迁移至System.Tex...
什么是AOT有何优点 JIT(即时编译): 是一种在程序运行之前将源代码或中间代码编译成目标平台的机器代码或可执行代码的编译技术。 AOT(提前编译): 是一种编译技术,它在程序运行之前将源代码或中间代码(如字节码)转换为目标平台的机器代码。 AOT相对JIT优点: 更快的启动时间:译。 更小的内存占用:可以在不需要安装.NET运行时的环境中运行。 不依赖.NET环境: 生成一个包含环境的...
起因 在公司中使用Windows系统, 开发中使用WSL2并装了Ubuntu22.04系统, 在Linux系统中使用拉取各种包时会出现大量超时, 导致工作效率非常低下. 在WSL2中设置 在WSL系统查看宿主机IP和端口, 使用命令:ip route | grep default | awk '{print $3}, 在v2ray主界面可以看到http代理端口. 设置代理脚本 # 添加...
约定 // 示例类, 后面一些基于此类扩展 public class Person { public string Name { get; set; } public DateTime Birthday { get; set; } } 扩展方法(Extension Methods)(C#3.0) 扩展方法特点: 定义一个静态类 静态类中实现一个静态方法 静态方法中的第一...
脚本日志分隔 宝塔面板的计划任务-新建计划任务-任务类型-网站日志切割可以批量配置网站的日志切割脚本, 每天晚上执行一次. Nginx模块日志分隔 nginx日志切割,这里使用的是默认安装的ngx_http_map_module插件, 可以使用nginx -V命令查看已安装的模块. 先设置一个nginx变量$logdate 将如下代码添加入nginx的http模块中 map $time_is...
常用概念 状态机 状态机(State Machine)全称是[有限状态自动机],不是指一台实际机器,而是现实事物运行规则抽象而成的一个数学模型。它由一组状态、转移条件和动作组成。 这里的自动可以理解成: 给定一个状态机,同时给定它的当前状态以及输入,那么输出状态是可以明确地运算出来的。 状态, 表示了系统或程序所处的特定情况或阶段, 可以分为改变前状态/改变后状态。 条件, 在什么条件下从...
模式匹配概述 C# 支持多种模式,包括声明、类型、常量、关系、属性、列表、var 和弃元等,在is、switch语句、switch表达式中使用,还可以使用布尔逻辑关键字 and、or 和 not 组合多个模式,极大的简化了代码编写,可读性也还不错。 模式匹配详解 类型和声明模式 检查类型是否匹配,同时申明变量,如果类型兼容则申明并赋值变量,该变量在后面代码作用域中有效。 object ag...
代码逻辑 今天遇到一个漏洞, 是关于图片上传的, 逻辑代码大概是将图片转化为Base64后上传到服务器. public function sendCompanyLogo(){ $imgBase64 = input('post.imgBase64/s','','trim'); if (preg_match('/^(data:\s*image\/(\w+);base64,)/',...
简介 微软在 .NET 5 中引入了 Source Generator 的新特性,利用 Source Generator 我们可以在应用编译期间根据当前编译信息动态生成代码,而且可以在我们的 C# 代码中直接引用动态生成的代码,从而大大减少重复代码。 前面我们介绍过Emit和表达式树,本篇讲到的源代码生成器也是同样一个动态代码生成方案,他们之间的区别: Source Generators在...
概述 在C#编程中,表达式树(Expression)是一种数据结构,表达式树也称表达式目录树,是将代码以一种抽象的方式表示成一个对象树,树中每个节点本身都是一个表达式。表达式树不是可执行代码,它是一种数据结构。但是可以利用LambdaExpression类的派生类Expression<TDelegate>将表达式树转化成可执行的Lambda表达式的委托,当然也可以将Lambda表...
第一部分:Emit介绍 Emit 是开发者在掌握反射的使用后,进阶需要的知识,它能显著的改善因反射带来的性能影响。 Emit 是一种动态生成IL代码的技术,通过使用 System.Reflection.Emit 命名空间中的类,可以在运行时创建和修改程序集、类型和方法。 Emit 技术通常用于解决需要在运行时动态生成代码的特定场景,例如在ORM(对象关系映射)框架中动态创建实体类,或者在AO...
背景 2008 年前后的 Midori 项目试图构建一个以 .NET 为用户态基础的操作系统,在这个项目中有很多让 CLR 以及 C# 的类型系统向着适合系统编程的方向改进的探索,虽然项目最终没有面世,但是积累了很多的成果。近些年由于 .NET 团队在高性能和零开销设施上的需要,从 2017 年开始,这些成果逐渐被加入 CLR 和 C# 中,从而能够让 .NET 团队将原先大量的 C++ 基...
什么是拆箱和装箱操作 .NET的类型分为两种,一种是值类型,另一种是引用类型。这两个类型的本质区别,值类型数据是分配在栈中,而引用类型数据分配在堆上。 装箱操作: 值类型转化成引用类型; 拆箱操作: 引用类型转化为值类型。 装箱和拆箱过程需要进行大量的计算。 对值类型进行装箱时,必须创建一个全新的对象。这可能比简单的引用赋值用时最多长 20 倍。 拆箱的过程所需时间可达赋值操作的4倍。[...
最近在做网站时,遇到了一个问题,目前主流浏览器当同时开通了http与https时,默认会将http自动跳转到https。会产出一些问题,例如在未合理配置的情况下导致了http页面请求https的内容时,反之也一样,会出现跨域或者请求失败的情况。 当关闭https后,可能因为浏览器缓存等原因导致http还是会继续跳转到https导致请求错误。 下面是解决其强制自动跳转的方法 chrome浏览器...
TCP/IP模型 TCP/IP模型是网络编程的基础,在TCP/IP网络分层模型里,整个协议栈被分成了物理层、链路层、网络层,传输层和应用层。物理层对应的是网卡和网线,应用层对应的是我们常见的Nginx,FTP等等各种应用。Linux实现的是链路层、网络层和传输层这三层。 在Linux内核实现中,链路层协议靠网卡驱动来实现,内核协议栈来实现网络层和传输层。 网络数据包的发送过程 int ma...
进程 程序是如何运行的? 程序编译链接形成可执行文件存储在硬盘 程序运行前把程序放入内存 程序开始运行前,操作系统创建对应的进程,建立PCB 指令序列读入内存——程序段 内存中存放运行中产生的数据——数据段 CPU从内存中取出指令开始运行 进程实体的组成 PCB是给操作系统用的,PCB是进程存在的唯一标识; 程序段、数据段是给进程自己用的。 进程的状态,及其状态的转化 创建态——系统完...
在计算的前几十年中,主内存非常慢且昂贵得令人难以置信,但是CPU也不是特别快。从1980年代开始,差距开始迅速扩大。微处理器的时钟速度飞速发展,但是内存访问时间的改善远没有那么明显。随着这种差距的扩大,越来越明显的是需要一种新型的快速存储器来弥合这种差距。 1980及以前:cpu没有cache 1980~1995: cpu开始有2级缓存 至今:有过L4,有些有L0,普遍有L1、L2、L3 ...
计算机为什么会有内存 在计算机中, 内存作为CPU与外部存储器之间的桥梁,可以临时存放CPU中的运算数据以及与硬盘等外部存储器交换的数据。通过将常用数据存储在内存中,计算机可以更快地访问和操作这些数据,从而提高运行效率。因此内存的主要作用就是缓和CPU与硬盘之间的速度矛盾。 从图中可知, 存储器层次之间的作用和关联为金字塔形状,CPU不可以直接操控磁盘,是通过操控内存/缓存来进行工作的,因...
文件系统基础 磁盘组织与管理 基础IO 在计算机操作系统中,所谓的I/O就是 输入(Input)和输出(Output),也可以理解为读(Read)和写(Write),针对不同的对象,I/O模式可以划分为磁盘IO模型和网络IO模型。 IO操作会涉及到用户空间和内核空间的转换,先来理解以下规则: 内存空间分为用户空间和内核空间,也称为用户缓冲区和内核缓冲区; 用户的应用程序不能直接操作内核空间...
2017年一场《守望先锋》的技术分享让我们认识到了ECS架构,ECS近年来已然成为游戏开发中比较热门的一种架构模式`。 Entity-Component-System(ECS)是一种架构模式,用于将游戏对象(实体)拆分为组件,并使用系统来处理这些组件的行为和逻辑。ECS架构模式的优点在于它提供了一种高度模块化和可扩展的方式来管理游戏对象和行为。 什么是ECS E Entity 实体,本质上...