第一部分:Emit介绍 Emit 是开发者在掌握反射的使用后,进阶需要的知识,它能显著的改善因反射带来的性能影响。 Emit 是一种动态生成IL代码的技术,通过使用 System.Reflection.Emit 命名空间中的类,可以在运行时创建和修改程序集、类型和方法。 Emit 技术通常用于解决需要在运行时动态生成代码的特定场景,例如在ORM(对象关系映射)框架中动态创建实体类,或者在AO...
第一部分: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浏览器...
pentaho-kettle Kettle,也称为Pentaho Data Integration,是一款强大的开源ETL(Extract, Transform, Load)工具。它主要用于从多个数据源提取数据,并对数据进行转换和加载到目标系统中。Kettle 提供了可视化的界面,使用户能够使用拖放方式创建数据流程,并通过连接不同的转换步骤进行数据转换和处理。Kettle 支持多种数据源和目...
迅排设计 一款漂亮且功能强大的在线图片设计器,仿稿定设计,适用于多种场景:海报生成、电商产品图、文章长图、视频/公众号封面等,让设计更简单! 开源地址和官网 官网:https://design.palxp.cn/home 开源:https://github.com/palxiao/poster-design 文档:https://xp.palxp.cn/
自建远程控制客户端:rustdesk 官网:https://rustdesk.com/zh/ GitHub:https://github.com/rustdesk/rustdesk 自建远程控制客户端:rustdesk-server GitHub:https://github.com/rustdesk/rustdesk-server 中文文档:https://rustdesk.com/doc...
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 ...
文件系统基础 磁盘组织与管理 基础IO 在计算机操作系统中,所谓的I/O就是 输入(Input)和输出(Output),也可以理解为读(Read)和写(Write),针对不同的对象,I/O模式可以划分为磁盘IO模型和网络IO模型。 IO操作会涉及到用户空间和内核空间的转换,先来理解以下规则: 内存空间分为用户空间和内核空间,也称为用户缓冲区和内核缓冲区; 用户的应用程序不能直接操作内核空间...
计算机为什么会有内存 在计算机中, 内存作为CPU与外部存储器之间的桥梁,可以临时存放CPU中的运算数据以及与硬盘等外部存储器交换的数据。通过将常用数据存储在内存中,计算机可以更快地访问和操作这些数据,从而提高运行效率。因此内存的主要作用就是缓和CPU与硬盘之间的速度矛盾。 从图中可知, 存储器层次之间的作用和关联为金字塔形状,CPU不可以直接操控磁盘,是通过操控内存/缓存来进行工作的,因...
2017年一场《守望先锋》的技术分享让我们认识到了ECS架构,ECS近年来已然成为游戏开发中比较热门的一种架构模式`。 Entity-Component-System(ECS)是一种架构模式,用于将游戏对象(实体)拆分为组件,并使用系统来处理这些组件的行为和逻辑。ECS架构模式的优点在于它提供了一种高度模块化和可扩展的方式来管理游戏对象和行为。 什么是ECS E Entity 实体,本质上...
Task详解 Task是在ThreadPool的基础上推出的。ThreadPool中有若干数量的线程(默认是CPU核心数2倍),如果有任务需要处理时,会从线程池中获取一个空闲的线程来执行任务,任务执行完毕后线程不会销毁,而是被线程池回收以供后续任务使用。当线程池中所有的线程都在忙碌时,又有新任务要处理时,线程池才会新建一个线程来处理该任务,如果线程数量达到设置的最大值,任务会排队,等待其他任...
热更新 热更新分为 资源热更新 和 代码热更新 两种,代码热更新实际上也是把代码当成资源的一种热更新,但通常所说的热更新一般是指代码热更新。 资源热更新:主要通过AssetBundle来实现,在Unity编辑器内为游戏中所用到的资源指定AB包的名称和后缀,然后进行打包并上传服务器,待游戏运行时动态加载服务器上的AB资源包。 代码热更新:主要包括Lua热更新、ILRuntime热更新和C#直...
在信息系统领域里, 有两个堪称双子星的应用, 那便是搜索引擎以及推荐系统。 推荐系统与搜索引擎,有许许多多技术是重合的。那么其中区别在哪里呢? 搜索引擎是pull模式, 推荐系统是push模式。 搜索引擎是系统掌握主动权,而推荐系统则是用户掌握主动权。 搜索引擎是提供短时间的,不稳定的信息检索;而推荐系统则是提供更长时间的信息供给。 推荐系统曾经还有一个名字,叫做filtering sy...
https://github.com/d2l-ai/d2l-zh http://zh.d2l.ai/chapter_preface/index.html
前言 在我们日常开发工作中,为了数据安全问题对数据加密、解密是必不可少的。加密方式有很多种如常见的AES,RSA,MD5,SAH1,SAH256,DES等,这时候假如我们有一个封装的对应加密解密工具类可以直接调用,那这样可以节省不少的开发时间。今天推荐一款实用的.NET Core加密解密工具类库:NETCore.Encrypt。 HASH操作 MD5加密 var srcString = "M...
话说, 在并发编程中通常使用的两种方案是: 共享数据 与 消息传递. 使用共享数据方式的并发编程面临的最大的一个问题就是数据条件竞争,处理各种锁的问题是让人十分头痛的一件事。 基于消息传递的并发模型有CSP模型(golang)和Actor模型, 这两种模型很像, 本文只讨论Actor模型. Actor简介 Actor模型是一个通用的并发编程模型,而非某个语言或框架所有,几乎可以用在任何一门编...
今天遇到个问题, 结构体通过属性访问修改的时候会出现以下编译错误 class Program { static void Main(string[] args) { Transform t = new Transform(); t.v.x = 1; // 编译不通过 t.ShowV(); Console.Read...