细聊C# AsyncLocal如何在异步间进行数据流转
前言
在异步编程中,处理异步操作之间的数据流转是一个比较常用的操作。C#异步编程提供了一个强大的工具来解决这个问题,那就是AsyncLocal。它是一个线程本地存储的机制,可以在异步操作之间传递数据。它为我们提供了一种简单而可靠的方式来共享数据,而不必担心线程切换或异步上下文的变化。本文 ...
使用C#创建安装Windows服务程序(干货)
开发语言:C#
开发环境: Visual Studio 2022
微软官方文档:https://learn.microsoft.com/zh-cn/dotnet/framework/windows-services/
最近在公司要求使用Windows服务作为消息队列的消费者,所以自行研究了一下C#中Windows服务如何创建以及如何使用,以及部署的方式。我是西瓜程序猿,此篇记录一下供大家参考学习。
一 ...
C#.NET 国密SM2 签名验签 与JAVA互通 ver:20230807
C#.NET 国密SM2 签名验签 与JAVA互通 ver:20230807
.NET 环境:.NET6 控制台程序(.net core)。
JAVA 环境:JAVA8(JDK8,JAVA 1.8),带maven 的JAVA控制台程序。
1.最好要到对方源码(DEMO+JAR包也可以),可以用IDEA反编译(Ctrl+鼠标左键),看它过程逻辑和结果格式。
2.常说的SM2签名,指的就是“SM3withSM2 ...
C#.NET 国密SM2 加密解密 与JAVA互通 ver:20230805
C#.NET 国密SM2 加密解密 与JAVA互通 ver:20230805
.NET 环境:.NET6 控制台程序(.net core)。
JAVA 环境:JAVA8,带maven 的JAVA控制台程序。
简要解析:1.最好要到对方源码(DEMO+JAR包也可以),可以用IDEA反编译(Ctrl+鼠标左键),看它过程逻辑和加密结果格式。
2.加密结果顺序:早期是 C1C2C3,后期是C1C ...
C#.NET 国密SM4对称加解密 与JAVA互通 ver:20230731
C#.NET 国密SM4对称加解密 与JAVA互通 ver:20230731
.NET 环境:.NET6 控制台程序(.net core)。
JAVA 环境:JAVA8,带maven 的JAVA控制台程序。
简要解析:
1:加密的KEY、明文等输入参数都需要string转 byte [] ,要约定好编码,如:UTF8。
2:加密后的输出参数:byte [] ,在传输时需要转为string,要约定 ...
Visual Studio C# 多环境配置 Web.config
目录添加解决方案配置添加配置转换添加应对的配置预览转换发布只对生成项目生效代码区分
开始以为像SpringBoot 那样,运行时也行效的,结果发现只对发布生效,VS里运行时不生效,凑活着用。
.Net Core appsettings.json 改进了
Visual Studio 为多环境配置 Web.config
不同的环境,存在不同的配置,如:数据库连接字符串, ...
C#.NET Framework 使用BC库(BouncyCastle) RSA 公钥加密 私钥解密 ver:20230706
C#.NET Framework 使用BC库(BouncyCastle) RSA 公钥加密 私钥解密 ver:20230706
环境说明:
.NET Framework 4.6 的控制台程序 。
2020年以后 ,有部分PKCS8私钥(openssl生成)无法用RsaUtil.LoadPrivateKey(strPriPkcs8, "PKCS8")来解析 (https://www.cnblogs.com/runliuv/p/17474269.htm ...
.NET Core 允许跨域的两种方式实现(IIS 配置、C# 代码实现)
〇、前言
当把开发好的 WebApi 接口,部署到 Windows 服务器 IIS 后,postman 可以直接访问到接口并正确返回,这并不意味着任务完成,毕竟接口嘛是要有交互的,最常见的问题莫过于跨域了。
若前端文件是在当前接口文件下的 wwwroot 文件夹下,那么接口的访问就没问题,因为是同协议(http、https)、同地址(域名)、同端口 ...
浅聊一下 C#程序的 内存映射文件 玩法
一:背景
1. 讲故事
前段时间训练营里有朋友问 内存映射文件 是怎么玩的?说实话这东西理论我相信很多朋友都知道,就是将文件映射到进程的虚拟地址,说起来很容易,那如何让大家眼见为实呢?可能会难倒很多人,所以这篇我以自己的认知尝试让大家眼见为实。
二:如何眼见为实
1. 我想象的文件映射
在任何讨论之前,内存文件 ...
C# 中的yield return机制和原理
前言#
当我们编写 C# 代码时,经常需要处理大量的数据集合。在传统的方式中,我们往往需要先将整个数据集合加载到内存中,然后再进行操作。但是如果数据集合非常大,这种方式就会导致内存占用过高,甚至可能导致程序崩溃。
C# 中的yield return机制可以帮助我们解决这个 ...
C# 版本特性一览
前言
使用 C# 作为开发语言已经 15 个年头了,受惠于 C# 的不断更新,伴随着大量的新特性与大量语法糖,让我更加容易写出简洁、高效的代码。日常中大量特性早已信手拈来,当然从未尝试过的特性更是难以尽数,但是每每回忆代码中的特性究竟是哪个版本引入的,却颇为含糊。索性简单整理记录下来,用以备忘,进而能够更精确地 ...
如何获取 C#程序 内核态线程栈
一:背景
1. 讲故事
在这么多的案例分析中,往往会发现一些案例是卡死在线程的内核态栈上,但拿过来的dump都是用户态模式下,所以无法看到内核态栈,这就比较麻烦,需要让朋友通过其他方式生成一个蓝屏的dump,这里我们简单汇总下。
二:如何生成内核态dump
1. 案例代码
为了方便演示,来一段简单的测试代码,目的就是观察 ...
由C# yield return引发的思考
前言
当我们编写 C# 代码时,经常需要处理大量的数据集合。在传统的方式中,我们往往需要先将整个数据集合加载到内存中,然后再进行操作。但是如果数据集合非常大,这种方式就会导致内存占用过高,甚至可能导致程序崩溃。
C# 中的yield return机制可以帮助我们解决这个问 ...
C# 面向对象
前言
C# 是一种面向对象、类型安全的语言。
❓什么是面向对象
面向对象编程(OOP)是如今多种编程语言所实现的一种编程范式,包括 Java、C++、C#。
面向对象编程将一个系统抽象为许多对象的集合,每一个对象代表了这个系统的特定方面。对象包括函数(方法)和数据。一个对象可以向其他部分的代码提供一个公共接口,而其他 ...
献给转java的c#和java程序员的数据库orm框架
献给转java的c#和java程序员的数据库orm框架
一个好的程序员不应被语言所束缚,正如我现在开源java的orm框架一样,如果您是一位转java的c#程序员,那么这个框架可以带给你起码没有那么差的业务编写和强类型体验。如果您是一位java程序员,那么该框架可以提供比Mybatis-Plus功能更加丰富、性能更高,更加轻量和完全免费的体验来做 ...
C# 实现 Linux 视频会议(源码,支持信创环境,银河麒麟,统信UOS)
信创是现阶段国家发展的重要战略之一,面对这一趋势,所有的软件应用只有支持信创国产化的基础软硬件设施,在未来才不会被淘汰。那么,如何可以使用C#来实现支持信创环境的视频会议系统吗?答案是肯定的。
本文讲述如何使用C#来实现视频会议系统的Linux服务端与Linux客户端,并 ...
自学C#,要懂得善用MSDN
很多初学者学习编程,都会通过看别人写的教程、或者录制的视频,来学习。
这是一个非常好的途径,因为这个是非常高效的。
但是这样,存在两个问题:
1、教程不够全面:任何再好的教程,都无法囊括所有的知识点,更多是讲解部分精髓而已;
2、无法掌握学习方法:很多教程都是教你如何使用,但是没有教你如何学习,如何掌握自 ...
C#写一套最全的MySQL帮助类(包括增删改查)
介绍说明:这个帮助类包含了六个主要的方法:ExecuteNonQuery、ExecuteScalar、ExecuteQuery、ExecuteQuery(泛型)、Insert、Update和Delete。其中,ExecuteNonQuery用于执行不返回结果集的SQL语句;ExecuteScalar用于执行一个查询,并返回结果集中第一行的第一列;ExecuteQuery用于执行一个查询,并返回结果集;ExecuteQu ...
C#中使用CAS实现无锁算法
CAS 的基本概念
CAS(Compare-and-Swap)是一种多线程并发编程中常用的原子操作,用于实现多线程间的同步和互斥访问。 它操作通常包含三个参数:一个内存地址(通常是一个共享变量的地址)、期望的旧值和新值。
CompareAndSwap(内存地址,期望的旧值,新值)
CAS 操作会比较内存地址处的值与期望的旧值是否相等,如果相等, ...
LRU缓存替换策略及C#实现
目录LRU缓存替换策略核心思想不适用场景算法基本实现算法优化进一步优化Benchmark
LRU缓存替换策略
缓存是一种非常常见的设计,通过将数据缓存到访问速度更快的存储设备中,来提高数据的访问速度,如内存、CPU缓存、硬盘缓存等。
但与缓存的高速相对的是,缓存的成本较高,因此容量往往是有限的,当缓存满了之后,就需要一 ...