使用.NET7和C#11打造最快的序列化程序-以MemoryPack为例
译者注
本文是一篇不可多得的好文,MemoryPack 的作者 neuecc 大佬通过本文解释了他是如何将序列化程序性能提升到极致的;其中从很多方面(可变长度、字符串、集合等)解释了一些性能优化的技巧,值得每一个开发人员学习,特别是框架的开发人员的学习,一定能让大家获益匪浅。
简介
我发布了一个名为MemoryPack 的新序列化程 ...
基于.net C# Socket WinForm MQTT 客户端开发
1、什么是MQTT? MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开 ...
在C#中使用Halcon开发视觉检测程序
目录简介将 HALCON/.NET 添加到应用程序添加控件引用dll调用Halcon算子程序示例HSmartWindowControl控件使用加载、保存图像扩展:加载相机图像画线、画框并保存检测算法抓边算法2D测量模型代码实现使用方法测宽算法附件
简介
本文的初衷是希望帮助那些有其它平台视觉算法开发经验的人能快速转入Halcon平台下,通过文中的示 ...
C#多线程(三)线程高级篇
前言
抛开死锁不谈,只聊性能问题,尽管锁总能粗暴的满足同步需求,但一旦存在竞争关系,意味着一定会有线程被阻塞,竞争越激烈,被阻塞的线程越多,上下文切换次数越多,调度成本越大,显然在高并发的场景下会损害性能。在高并发高性能且要求线程安全的述求下,无锁构造(非阻塞构造)闪亮登场。
如果你对同步&阻塞不是很 ...
C#11之原始字符串
最近.NET7.0和C#11相继发布,笔者也是第一时间就用上了C#11,其中C#11的有一个更新能解决困扰我多年的问题,也就是文章的标题原始字符串。
在使用C#11的原始字符串时,发现的一些有意思的东西,超出了我原本对它的期待,话不多说,我们一起来看看。
多年的困扰
我不知道大家有没有写过这样的代码,在单元测试里面我需要创建 ...
C#多线程(一)线程基础篇
线程基础
视频已经发布到B站
如果你已经掌握了线程基础,请跳往下一篇:同步基础传送门
参考文章:
《Threading in C# 》(Joseph Albahari)https://www.albahari.com/threading/
《Threading in C# 》中文翻译(GKarch ):https://blog.gkarch.com/topic/threading.html
《图解系统》(小林coding):https://xiaolincod ...
C# GDI+ 画心形 跳动动画
最近听说什么国产神剧的期中考试画心形题很火,打算跟风用C#复刻一下
先看看效果:
话不多说直接上代码
public Form1()
{
DoubleBuffered = true; //首先窗体记得设置双缓冲
SetStyle(ControlStyles.ResizeRedraw | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPai ...
C# 9.0 添加和增强的功能【基础篇】
一、记录(record)
C# 9.0 引入了记录类型。 可使用 record 关键字定义一个引用类型,以最简的方式创建不可变类型。这种类型是线程安全的,不需要进行线程同步,非常适合并行计算的数据共享。它减少了更新对象会引起各种bug的风险,更为安全。System.DateTime 和 string 也是不可变类型非常经典的代表。
与类不同的是 ...
C# RulesEngine 规则引擎:从入门到看懵
目录说明安装怎么使用多参数全局参数、本地参数全局参数本地参数定义验证成功、失败行为计算折扣使用自定义函数静态函数实例函数自定义执行器
说明
RulesEngine 是 C# 写的一个规则引擎类库,读者可以从这些地方了解它:
仓库地址:
https://github.com/microsoft/RulesEngine
使用方法:
https://microsoft.github.io/Rule ...
TTD 专题 (第一篇):C# 那些短命线程都在干什么?
一:背景
1.讲故事
在分析的众多dump中,经常会遇到各种奇葩的问题,仅通过dump这种快照形式还是有很多问题搞不定,而通过 perfview 这种粒度又太粗,很难找到问题之所在,真的很头疼,比如本篇的 短命线程 问题,参考图如下:
我们在 t2 时刻抓取的dump对查看 短命线程 毫无帮助,我根本就不知道这个线程生前执行了什么代 ...
【Python+C#】手把手搭建基于Hugging Face模型的离线翻译系统,并通过C#代码进行访问
前言:目前翻译都是在线的,要在C#开发的程序上做一个可以实时翻译的功能,好像不是那么好做。而且大多数处于局域网内,所以访问在线的api也显得比较尴尬。于是,就有了以下这篇文章,自己搭建一套简单的离线翻译系统。以下内容采用python提供基础翻译服务+ C#访问服务的功能,欢迎围观。
系统环境: WIN10
开发环境 ...
C# 中的那些锁,在内核态都是怎么保证同步的?
一:背景
1. 讲故事
其实这个问题是前段时间有位朋友咨询我的,由于问题说的比较泛,不便作答,但想想梳理一下还是能回答一些的,这篇就来聊一聊下面这几个锁。
Interlocked
AutoResetEvent / ManualResetEvent
Semaphore
用户态层面我就不想说了,网上一搜一大把,我们只聊一聊内核态。
二:锁玩法介绍
1. Interlo ...
[开源福利] FreeRedis 历时两年正式发布 v1.0 [C#.NET Redis Client]
🌳 开源理念
FreeRedis 的命名来自,“自由”、“免费”,它和名字与 FreeSql 是一个理念,简易是他们一致的追寻方向,最低可支持 .NET Framework 4.0 运行环境,支持到 Redis-server 8.0(超时空版本)。
开源地址:https://github.com/2881099/FreeRedis
FreeRedis 以最宽松的开源协议 MIT 开源,从第一个版本 v0.0.1 发 ...
跨语言调用C#代码的新方式-DllExport
简介
上一篇文章使用C#编写一个.NET分析器文章发布以后,很多小伙伴都对最新的NativeAOT函数导出比较感兴趣,今天故写一篇短文来介绍一下如何使用它。
在以前,如果有其他语言需要调用C#编写的库,那基本上只有通过各种RPC的方式(HTTP、GRPC)或者引入一层C++代理层的方式来调用。
自从微软开始积极开发和研究Native AOT以 ...
使用C#编写一个.NET分析器(一)
译者注
这是在Datadog公司任职的Kevin Gosse大佬使用C#编写.NET分析器的系列文章之一,在国内只有很少很少的人了解和研究.NET分析器,它常被用于APM(应用性能诊断)、IDE、诊断工具中,比如Datadog的APM,Visual Studio的分析器以及Rider和Reshaper等等。之前只能使用C++编写,自从.NET NativeAOT发布以后,使用C#编写变为 ...
FreeSql 导入数据的各种场景总结 [C#.NET ORM]
💻 前言
导入数据这种脏活、累活,相信大家多多少少都有经历,常见的场景有:
同服务器从A表导数据到B表
批量导入新数据
批量新增或更新数据
跨服务器从A表导数据到B表
每种场景有自己的特点,我们一般会根据特点定制做导入数据优化,减少总体导入的耗时,或者避免数据库IO/CPU占用过高,而影响到其他正常业务。
FreeSql ...
C#/.NET/.NET Core优秀项目框架推荐
前言:
为.NET开源者提供的一个推荐自己优秀框架的地址,大家可以把自己的一些优秀的框架,或者项目链接地址存到在这里,提供给广大.NET开发者们学习(注意:排名不分先后,都是十分优秀的开源框架和项目💖)。
Github项目仓库收集地址:https://github.com/YSGStudyHards/DotNetGuide/issues/5
C#/.NET/.NET Core优秀 ...
如何在 C# 程序中注入恶意 DLL?
一:背景
前段时间在训练营上课的时候就有朋友提到一个问题,为什么 Windbg 附加到 C# 程序后,程序就处于中断状态了?它到底是如何实现的? 其实简而言之就是线程的远程注入,这一篇就展开说一下。
二:实现原理
1. 基本思路
WinDbg 在附加进程的时候,会注入一个线程到 C# 进程 中,注入成功后,会执行一个 DbgBreakPoint ...
在 C# 中使用 Span<T> 和 Memory<T> 编写高性能代码
目录在 C# 中使用 Span 和 Memory 编写高性能代码.NET 中支持的内存类型.NET Core 2.1 中新增的类型访问连续内存: Span 和 MemorySpan 介绍C# 中的 SpanSpan 和 ArraysSpan 和 ReadOnlySpanMemory 入门ReadOnlyMemorySpan 和 Memory 的优势连续和非连续内存缓冲区不连续的缓冲区: ReadOnly 序列实际场景Benchmarking 基准测 ...
C# 使用SIMD向量类型加速浮点数组求和运算(1):使用Vector4、Vector<T>
作者: 目录一、缘由二、使用向量类型2.1 基本算法2.2 使用大小固定的向量(如 Vector4)2.2.1 介绍2.2.2 用Vector4编写浮点数组求和函数2.3 使用大小与硬件相关的向量(如 Vector<T>)2.3.1 介绍2.2.1.1 使用经验2.3.2 用 Vector<T> 编写浮点数组求和函数三、搭建测试程序3.1 主测试代码(BenchmarkVectorDemo)3.1.1 测试 ...