
C#
liulilittle
如果我只是恨你,那该多好;这一生,终究没能逃出这囚笼;也好,但愿此去,能化归烟云浮尘;逍遥天地,再无拘束。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
基于表达式树的ORM规约模式在CQRS架构中的应用(FCL框架类库)
本文探讨了基于表达式树的ORM规约模式在CQRS架构中的应用。首先分析了编译器对表达式树的特殊处理机制,展示了其运行时内存结构,包括LambdaExpression和BinaryExpression等节点的组织方式。随后深入解析了规约模式的设计原理,重点介绍了ISpecification接口的抽象设计、规约链的构建过程及其内存布局。最后详细阐述了表达式树解析引擎的核心算法,包括深度优先遍历策略和复杂表达式的处理技术。通过表达式树与规约模式的结合,实现了类型安全的动态查询构建,为CQRS架构的数据访问层提供了原创 2025-07-29 00:26:36 · 426 阅读 · 0 评论 -
EAP(基于事件的异步编程模式)
摘要: EAP(基于事件的异步模式)通过事件驱动实现异步操作解耦,调用者无需阻塞线程,由事件处理器响应操作结果。其核心原理是线程池执行耗时任务后,通过SynchronizationContext自动切换回UI线程触发事件。典型结构包含Async方法、Completed事件和CancelAsync取消机制,需注意内存泄漏和并发操作混淆问题。相较于现代TAP(基于任务的异步模式),EAP在WinForms等传统场景中仍有价值,但新项目建议采用async/await实现更简洁的异步逻辑。EAP的设计思想为早期.N原创 2025-07-28 23:39:39 · 998 阅读 · 0 评论 -
SQL ORM映射框架深度剖析:从原理到实战优化
🌟 SQL ORM框架核心技术解析 本文深度剖析SQL ORM框架的实现原理与优化策略,主要内容包括: 1️⃣ 架构设计: 采用分层架构(客户端/ORM核心/数据访问/数据库) 核心组件包括命令构建引擎、数据转换器、执行控制器和安全网关 2️⃣ 关键技术实现: DataSet转换引擎优化内存使用(GetValues批量读取) 动态SQL命令生成(INSERT/UPDATE智能构建) 参数化查询与存储过程参数推导 3️⃣ 安全机制: 多层级防护体系(参数化+输入验证+转义处理) 正则检测拦截SQL注入攻击原创 2025-07-14 22:20:50 · 370 阅读 · 0 评论 -
IoC容器深度解析:架构、原理与实现
🌟 IoC容器深度解析摘要 IoC容器通过依赖反转机制实现组件解耦,其演进从强耦合的直接依赖到服务定位器,最终发展为动态注入的现代IoC模式。核心实现分静态注入(AOT编译时IL改写)和反射注入(运行时动态构建)两种,前者适用于高性能场景,后者更具灵活性。工业级IoC容器采用分层架构,包含持久化集合、依赖构建器和生命周期管理等组件,支持Singleton/Scoped/Transient三种生命周期模式。关键实现技术包括表达式树编译、双检锁缓存和递归依赖解析,通过并发集合保障线程安全,显著提升系统可维护性原创 2025-07-14 21:56:37 · 717 阅读 · 0 评论 -
深度剖析:动态接口代理核心原理与高级应用
🔍 动态接口代理技术深度解析 本文系统阐述了动态接口代理技术的核心原理与高级应用。通过剖析代理模式的底层实现,揭示了字节码操控、方法重定向等关键技术机制,并展示IL代码层面的具体实现细节。在AOP整合方面,文章详细介绍了切面组件实现策略和性能优化方案,提供环绕通知的典型实现模板。架构设计层面,重点分析了代理模式在分层解耦、依赖注入中的实践价值,并探讨了动态插件系统等高级应用场景。最后通过工程实践数据对比,证明代理模式在代码清洁度、关注点分离度等可维护性指标上的显著优势。原创 2025-07-14 21:13:34 · 853 阅读 · 0 评论 -
.NET ExpandoObject 技术原理解析
🌟 .NET ExpandoObject 技术解析 ExpandoObject 是 .NET 中实现动态扩展对象的核心类,其架构设计包含三个关键组件: 核心数据结构:使用 IDictionary<string, object> 字典存储动态成员 元对象提供机制:通过 ExpandoMetaObject 继承 DynamicMetaObject 实现动态绑定 表达式树构建:运行时动态生成表达式树来执行成员操作 工作流程分为四个阶段: 用户发起动态操作请求 DLR 层处理操作类型并调用对应绑定方法原创 2025-07-14 11:26:39 · 1068 阅读 · 0 评论 -
深度分析:堆排序算法实现(小顶堆与大顶堆)
🌟 堆排序算法深度解析(小顶堆与大顶堆) 本文详细剖析了堆排序算法的两种实现方式:小顶堆用于降序排序,大顶堆用于升序排序。通过可视化流程图和堆结构演化示例,清晰展示了堆调整的核心过程。代码解析部分分别演示了小顶堆和大顶堆的建堆与排序逻辑,重点对比了二者的堆调整方向差异(小顶堆选择更小的子节点,大顶堆选择更大的子节点)。文章还提供了排序过程的状态表格,直观呈现每一步堆结构的变化与数组排序进度。两种实现均采用相同的"建堆-交换-调整"范式,但通过不同的比较逻辑实现了相反的排序效果,体现了堆原创 2025-07-14 10:18:35 · 554 阅读 · 0 评论 -
桶排序算法深度剖析
桶排序算法优化与实现解析 摘要:本文深入剖析桶排序算法,通过流程图解和类图模型展示其核心原理和内存结构。重点修正了桶分配公式错误(原用除法导致所有元素进0桶),提出直接映射法(index=value-min)。针对值域爆炸问题,建议动态控制桶数量;对于重复元素退化,引入提前终止检查。完整代码实现包含升/降序处理,时间复杂度分析显示:最佳O(n+k),最差O(n²)。典型适用于数据均匀分布场景,但当值域过大或元素全相同时需谨慎使用。原创 2025-07-14 09:33:06 · 1075 阅读 · 0 评论 -
中国大陆二代身份证号码验证算法
中国大陆二代身份证校验算法摘要核心结构18位编码:地址码(6位) + 出生日期码(8位) + 顺序码(3位) + 校验码(1位)顺序码规则:奇数表男性,偶数表女性校验算法核心权重分配:前17位固定权重因子 [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]加权求和:计算前17位数字与权重的乘积之和取模运算:对加权和进行 S % 11 操作校验码映射:余数对应校验码 10X98765432关键特性原创 2025-07-07 01:38:22 · 874 阅读 · 0 评论 -
深度解析:轻量级CLR/JIT即时编译系统设计与实现(二)
本文深入解析了轻量级CLR/JIT即时编译系统的设计与实现,系统采用分层架构设计,包含应用层、JIT服务层、代码生成层和平台适配层。核心编译流程分为IL指令解码、控制流分析、寄存器分配、指令选择和机器码生成等阶段。文章详细剖析了函数栈帧构建过程,包括栈帧初始化(def方法)和尾声处理(ret方法)的机器码生成逻辑,并展示了x86架构下的栈帧内存布局。该系统通过内存管理和委托绑定实现高效执行,支持反馈优化循环提升性能。原创 2025-07-06 14:41:22 · 900 阅读 · 0 评论 -
深度解析:轻量级CLR/JIT即时编译系统设计与实现(一)
CLR/JIT即时编译系统核心解析 摘要:本文深入剖析了轻量级CLR/JIT即时编译系统(SimpleClr)的设计与实现。系统采用分层架构设计,包含JIT服务层、代码生成层和平台适配层。核心流程包括栈帧初始化、指令调度、机器码生成和分支处理,实现了IL栈式指令到x86寄存器架构的高效转换。系统采用标签回填技术处理分支指令,通过内存管理器将生成的机器码固定到可执行内存区域,最终通过委托调用执行。关键技术包括寄存器分配策略、栈平衡维护和指令选择优化,为理解JIT编译原理提供了实践参考。原创 2025-07-06 14:26:14 · 706 阅读 · 0 评论 -
C# 语言实现 YCombinator(Y组合子)及多个简化代码分解
上述不变点(G)会被执行调用六次,N=5,4,3,2,1,0,N为0时放弃下个递归,F为 YCombinator.Y 模板函数中 “R” 内存地址指向的匿名函数(Lambda)。到这里还看不懂Y组合子的代码实现,或许它不太适合您,本身它也只是一种特殊技巧,在C#这种语言中基本是没有必要适用的,它较适用于:Haskell、F# 这类函数式编程语言。实际上按照 YCombinator 的高级操作玩法,不变点G函也不许允许适用类似 if / else 等传统编程语言流程控制语句控制,而是以函数式完成。原创 2023-03-28 01:52:51 · 404 阅读 · 0 评论 -
C/C++、C#、F#、Go AMD x86-64 编译器内部实现乘法运算
我们知道任何编译器语言都不是直接编译 “目标CPU平台汇编机器字节码”(汇编),哪怕是:C/C++ 编译器也是相同的,需要预编译为ASM汇编文本源码后,提交输入ASM编译器进行静态编译,VC++ CL内集MASM编译器。人们从上述,可以自行看出很多门道来了;没有严格的从目标平台CPU机器汇编代码执行来判断某个编程语言编译代码的执行效率是没有意义的。而本文的获取的不同语言执行汇编代码就是这个步骤的由编译器生成的源码。原型表达式:C/C++原创 2022-11-05 11:50:46 · 739 阅读 · 0 评论 -
C#[MSIL EMIT+] VirtualProxy 动态程序集与动态类型绑定
【代码】C# VirtualProxy 动态程序集与动态类型绑定。原创 2022-11-05 00:21:54 · 233 阅读 · 0 评论 -
C# 旋转图片(GDI+)
【代码】C# 旋转图片(GDI+)原创 2022-11-05 00:14:30 · 510 阅读 · 0 评论 -
C# 利用WINAPI函数 NtQuerySystemInformation 获取CPUload利用率
【代码】C# 利用WINAPI函数 NtQuerySystemInformation 获取CPUload利用率。原创 2022-11-05 00:09:27 · 594 阅读 · 0 评论 -
C# 下调试陷阱/调整权限/剥离调试器/调试自己
【代码】C# 下调试陷阱/调整权限/剥离调试器/调试自己。原创 2022-11-05 00:04:16 · 675 阅读 · 2 评论 -
从.NET函数栈中利用汇编推断JIT/STUB存根的委托(delegate)地址
【代码】从.NET函数栈中利用汇编推断JIT/STUB存根的委托(delegate)地址。原创 2022-11-05 00:01:02 · 115 阅读 · 0 评论 -
C# 判断当前是否为 “以管理员身份运行” 的程序的三种方法
示例:BOOL isAdministrator = IsNTAdmin(0, NULL);示例:BOOL isAdministrator = IsUserAnAdmin()原创 2022-11-04 23:57:09 · 1402 阅读 · 0 评论 -
C# 实现TX GTK算法
【代码】C# 实现TX GTK算法。原创 2022-11-04 23:50:18 · 278 阅读 · 0 评论 -
C# Intel x86 汇编类实现(用于编写动态汇编机器码#shellcode)
知道易语言写动态汇编shellcode的模块把,类似那种。原创 2022-11-04 23:40:24 · 832 阅读 · 0 评论 -
C# UTF-8字符集长度获取及判断二进制块是否UTF-8编码字符集算法的实现
【代码】C# UTF-8字符集长度获取及判断二进制块是否UTF-8编码字符集算法的实现。原创 2022-11-04 23:30:06 · 391 阅读 · 0 评论 -
C# 利用WINAPI MultiByteToWideChar、WideCharToMultiByte 函数实现:A2W、W2A 及UTF8字符集变换
CP_ACP 936 为简体中文(可以通过 GetACP() 函数获取当前系统语言,若为简体中国则为 936,它其实就是 LCID)CodePage 为0则获取系统当前默认的 CodePage(字符集)原创 2022-11-04 23:24:33 · 624 阅读 · 0 评论 -
适用 C# 语言实现升序/降序的 “基数排序”、“堆排序”、“桶排序”、“快速排序”、“选择排序”、“冒泡排序” 等算法
测试数组:var array = new int[] { 73, 57, 49, 99, 133, 20, 1 };4、桶排序:BucketSort2(array, false);2、基数排序:RadixSort(array, false);3、快速排序:QuickSort(array, false);1、堆排序:HeapSort(array, false);1、桶排序【堆内存负载重:O(n + k)】1、快速排序(QuickSort)4、桶排序(BucketSort)1、基数排序(矢量排序)原创 2022-10-15 22:33:32 · 847 阅读 · 0 评论 -
SendKeys.SendWait 函数模拟键盘输入
几行代码的小工具可以用C#直接做,模拟指令多点键盘精灵脚本更不错,模拟键盘的输入可以用于来 “阻止,腾讯云、IBM云shell、甲骨文云shell”...等平台,十分钟、二十分钟不输入自动关闭终端的问题,而工作 cloud-shell 的服务器配置还是不错的,起码比你花钱,每月买的低配要强一大截。下述代码保存为单独的源文件,直接用操作系统自带的CSC编译器编译为EXE可执行程序,就可以拿出来跑了。原创 2022-08-21 20:27:19 · 1124 阅读 · 0 评论 -
GDB 本地调试 Microsoft .NET Native(CoreRT) 原生编译的 C#/VB.NET PE可执行文件
但需警告,大多数的开发人员,AOT程序不意味着,代码执行的性能就能比,JIT即时编译的托管程序性能更强悍,一旦人们采用AOT编译程序,那就是放弃了JIT为每个目标机器CPU,利用CPU Instruction Set(指令集)高度优化硬件加速的特性,因为AOT要保证通用平台上的代码可执行,就不可以使用更为先进的 “CPU指令集” 操作数,否则老旧平台的CPU可能没法处理这样的指令而抛出 “CPU指令操作数错误” 的中断信号。4、玄学的性能,或许比托管跑的快,也可能比托管跑的慢,取决于多个因素。......原创 2022-08-17 16:34:10 · 593 阅读 · 0 评论 -
Ubuntu 16/18/20/22 Linux 发行版系统上面运行 .NET Core 程序依赖库及 .NET Native 原生可执行程序调试相关。
安装GDB/GCC相关的东西可以用于调试由 Microsoft .NET Native(CoreRT) 原生编译器(.NET) 编译的 Linux ELF二进制可执行代码程序,它的函数栈命名很有规范的,但缺点是不可以原生编译选项配置上面不得开启大量的删减调用堆栈符号表信息与优化裁切堆栈(优化过后的函数堆栈检索相对要麻烦很多,有些是根本看不懂的)一般性:命名空间 + 类名 + 函数名(基本是编译后的IL元数据美化为C风格的命名)举例命名的符号规范一般为:(注意是C风格,而不是C++符号风格)......原创 2022-08-17 15:57:35 · 876 阅读 · 0 评论 -
C++ and C# 从TLS握手二进制中获取SNI(服务器名称指示)域名
TLS客户端首帧连接TLS服务器时,会发送ClientHello消息请求服务器进行SSL/TLS握手,早年的SSL/TLS协议是不提供SNI扩展的,但后续因为服务器上需求SNI区分域的必要性,SSL/TLS协议标准制定了SNI扩展标准,发展到今天没有SNI的SSL/TLS连接几乎都不能被大多数的SSL/TLS服务器受理处理。...原创 2022-08-02 13:36:21 · 859 阅读 · 0 评论 -
.NET 设置Socket 对象的“TFO”快速打开连接选项(跨平台兼容的)
.NET设置Socket对象的“TFO”快速打开连接选项(跨平台兼容的)原创 2022-07-17 17:22:27 · 185 阅读 · 0 评论 -
.NET Socket 实例安全且高性能的TCP连接关闭。
.NET Socket 提供的封装 Shutdown 人们不要去调用它,因为它可能无意义的抛出SHE结构化异常,而异常在大面积被抛出的情况下,可执行程序是没有办法捕获的,因为调用堆栈会因为大量的异常抛出/捕获而不搞坏,无论是C/C++,还是C#在同一个时间内大量的异常抛出,都无法被捕获,所以对于C派系的工程师,我们要求代码不允许存在出发任何异常,否则这个代码是低效且垃圾的,JAVA就随便抛异常,因为它们的异常只是逻辑上的并不算真正意义上的SEH结构化异常,不会因为大量的异常抛出/捕获导致程序直接崩溃。对于.原创 2022-07-11 15:26:50 · 538 阅读 · 0 评论 -
C# 2~36进制数转化实现
C# 2~36进制数转化实现原创 2022-06-08 19:47:24 · 525 阅读 · 0 评论 -
IP地址 “V6ToV4,V4ToV6” 转换函数实现
关键数据结构 [StructLayout(LayoutKind.Explicit, Pack = 1, Size = 16)] private struct IPV62V4ADDR { [FieldOffset(0)] public long R1; [FieldOffset(8)] public ushort R2; [FieldO原创 2022-05-29 02:45:06 · 1285 阅读 · 0 评论 -
.NET Datagram(数据报)Socket 潜在停止收取数据的疑难故障问题。
UDP socket 属于数据报类型的 “套接字” 该问题,自然也存在上述提到的疑难故障问题,通常一个 UDP socket 持续一天及以上频繁不停的收取 “数据报” 数据,就会出现奇葩的 “ReceiveFrom” 失效,再也收不到任何数据的问题,在.NET的基础上要解决这个问题的办法只有一种,关掉该 Socket 重新实例化一个新的 Socket 以后,即可正确恢复工作。该问题覆盖到 “.NET Core”、“.NET Framework”、“.NET Standard” 等,至今未被 Micros原创 2022-05-28 16:07:27 · 291 阅读 · 0 评论 -
C# 语言调用 “WINAPI SetProcessWorkingSetSize” 函数转储闲置内存到虚拟内存上面。
通常不建议C#语言调用该函数来减少闲置内存,因为它并不能减少实际进程占用得内存数量,算是一种自欺欺人得做法,并且调用它也会潜在得导致.NET程序得性能降低(假设需要从虚拟内存重新换入物理内存页上面)但对于运行在用户PC上面得客户端类型程序是可以执行该函数得,因为我们知道.NET Framework(MSCOREE CLR)平台虚拟机非常占用内存,比不了JAVA JVM得功耗,但也并不算低,.NET Core CLR Hosting 内存功耗就会好少不少,当然,我们仍旧可以主动得要求Heap GC系统尽快原创 2022-05-19 18:39:01 · 780 阅读 · 0 评论 -
基于 “Async/Await” 关键字实现 Socket AcceptYield() 函数。
用法: Socket server; while (!this.IsDisposed && (server = this._server) != null) { Socket socket = await AcceptYield(server); if (socket == null) {原创 2022-05-11 22:26:21 · 219 阅读 · 0 评论 -
C#语言的一种特殊的 Codde Jumper 代码实现。
[SecurityCritical] [SecuritySafeCritical] public static T CreateJumper<T>(Hooker hooker) where T : class, Delegate { if (Environment.Is64BitProcess) { return null; }...原创 2022-05-07 21:35:29 · 368 阅读 · 0 评论 -
C# Windows AES高级加密算法 Rijndael Fips 算法调用报错问题
程序启动时或者调用AES类时(RijndaelManaged) 静态构造里面执行 “FipsAlgorithmPolicy.Repair()” 世界核平、可亲。namespace My.Cryptography.Standard{ using System;#if NETCOREAPP using System.Runtime.CompilerServices;#endif using Microsoft.Win32; public static class F原创 2022-05-07 13:07:54 · 609 阅读 · 0 评论 -
C# 打开TAP驱动设备
.Net Framework x86 才可以打开驱动设备句柄,反之 .Net Core x64 才可以打开设备,要问为什么其实早前研究过一段时间,似乎是 .NetP/Invoke 的兼容性问题,TAP驱动只允许异步方式读写,同步方式读写一段时间以后就会收不到数据,另外 .Net 上面TAP驱动设备读写通过 “FileStream” 需要加锁同步 Flush,否则吞吐上不去并且会导致内部缓冲区溢出问题。namespace My.Net{ using System; using Sys.原创 2022-05-07 12:59:43 · 1338 阅读 · 2 评论 -
.NET CoreRT AOT原生程序编译使用的一些小建议
微软为 dotnet 提供的一个.NET托管程序的原生程序AOT编译器,但目前限制还是蛮多的,比如动态载入程序集、动态表达式、Emit(反射发出)这些都不被支持(备注:动态表达式,底层实现是基于 Emit)本文不东扯淡,西扯淡跑出来坑人,只提供一些关于 .NET CoreRT AOT原生编译相对而言较为中肯的建议。1、动态编程限制:由于目前.NET AOT编译技术上的一些限制,微软还没有做到把需要动态JIT编译的部分与AOT静态编译的部分混合在一起,只能单AOT静态编译,所以这也就导致了动态编程原创 2022-03-11 00:46:31 · 2400 阅读 · 0 评论 -
通过HTTP API的 ddns 自动刷新
本文推荐使用 “Free DDNS” 家的免费DDNS服务,如果你自己已拉线商用带宽,没有家庭带宽的话,就不需要考虑DDNS了,除非是商宽是DHCP公网IP的,这类商宽一般被拿来搞违法买卖的人很多,商宽,动态IP,啧啧,市场,钱景很大。可以通过以下的HTTP接口来刷新,你的机器公网IP与域名之间进行关联,基本可以做到近乎不断线的,家庭带宽PPOPE拨号认证通常只要一秒以内就可以完成,自动调用程序,每隔X秒都去请求一次就可以,每秒请求是最佳的。https://freemyip.com/update.原创 2022-02-25 11:45:30 · 751 阅读 · 0 评论