
C#
文章平均质量分 55
CnLg.NJ
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
浅谈【C#】log4net
Log4net库是.Net下一个非常优秀的开源日志记录组件,是一个帮助程序员将日志信息输出到各种目标(控制台、文件、数据库等)的工具。是一个开源的日志记录框架,用于.NET平台。它提供灵活的日志记录功能,允许开发者将日志信息输出到不同的目的地,例如控制台、文件、数据库等。支持多种日志级别,如DEBUG、INFO、WARN、ERROR和FATAL,并且可以配置不同的日志策略,例如滚动文件、时间触发的文件等。使用 log4net,可以在运行时修改配置文件,你不需要重新编译源代码就能改变日志的输出形式。原创 2024-08-06 10:19:33 · 503 阅读 · 0 评论 -
C# 浅谈线程安全的集合ConcurrentQueue
ConcurrentQueue 是 C# 中另一个线程安全的集合,它位于 System.Collections.Concurrent 命名空间中。Enqueue(T item): 向队列的末尾添加一个元素。如果操作成功,则返回 true。TryDequeue(out T result): 尝试从队列的开头移除并返回一个元素。如果队列为空,则不执行任何操作并返回 false;如果成功移除并返回元素,则返回 true。IsEmpty: 一个属性,用于检查队列是否为空。Clear(): 移除队列中的所有元素。原创 2024-07-12 09:25:57 · 684 阅读 · 0 评论 -
浅谈【C#】代码注册COM组件
在这个示例中,我们首先定义了一个COM接口 `IMyComInterface` 和一个实现了该接口的类 `MyComClass`。然后,我们使用 `RegisterTypeForComClients` 方法在 `Main` 方法中注册了 `MyComClass` 类作为COM组件。在C#中注册COM组件通常涉及到使用`regasm`工具或者在代码中使用`System.Runtime.InteropServices`命名空间下的`RegisterTypeForComClients`方法。原创 2024-08-01 08:42:21 · 1090 阅读 · 0 评论 -
C# DataGridView导出到 Excel 并保持格式一致
EPPlus 5+ 需要设置 LicenseContext,如果是商业用途需要购买许可证。:对于几千行的数据,这个方法是可行的,但如果数据量更大(数万行),可能需要考虑分批处理。:代码会复制 DataGridView 单元格的背景色和字体颜色到 Excel 单元格。:将 DataGridView 中的文本内容和颜色样式同步到 Excel 单元格。:如果你更喜欢使用 ClosedXML,也有类似的 API 可以实现相同的功能。:如果需要复制更多格式(如边框、字体样式等),可以在代码中添加相应的处理逻辑。原创 2025-07-21 15:43:24 · 317 阅读 · 0 评论 -
如何处理从GetSchema方法返回的DataTable对象?
在 C# 中,处理从返回的对象时,通常需要遍历表格行()并提取所需的元数据。以下是常见的处理模式和示例:只获取基础表(排除视图):使用集合,并筛选特定表的列:创建模型类,批量转换数据:判断结果集是否包含特定列:使用 LINQ 查询(需引入):不同数据库的列名可能不同(如在 MySQL 中可能是,在 SQL Server 中可能是):原创 2025-07-12 10:56:58 · 217 阅读 · 0 评论 -
多线程数据共享BlockingCollection和ConcurrentQueue的区别
可设置最大容量,当队列满时,生产者线程会自动阻塞,形成天然的背压机制。无容量限制,生产者可无限添加,可能导致内存溢出。简单的生产者 - 消费者模式、自动阻塞、容量限制、优雅的完成标记。高性能无锁队列、手动控制生产消费逻辑、自定义扩展。专注于高效的队列操作,无额外抽象层,性能更优。可包装多种并发集合(如。),支持自定义数据结构。原创 2025-07-11 11:07:29 · 416 阅读 · 0 评论 -
C# ConcurrentDictionary 中获取指定范围的元素
需要注意的是,ConcurrentDictionary 的元素顺序是不确定的,除非你显式排序。如果元素的顺序对你很重要,建议使用其他有序集合或在查询时明确指定排序方式。不过需要注意的是,ConcurrentDictionary 是无序集合,获取的元素顺序可能不固定。中获取第 2 到第 5 个元素(索引 1 到 4,因为索引从 0 开始),可以使用 LINQ 的。这段代码的核心是使用。原创 2025-06-11 16:55:54 · 250 阅读 · 0 评论 -
C# StringBuilder代码中预分配容量的作用
初始容量通常为 16,随着内容增加,会触发多次内存重新分配(16 → 32 → 64 → 128 → 256 → ...)。一次性分配足够的内存(如 800),整个过程无需重新分配,效率显著提升。通过合理预估并分配初始容量,可以显著减少内存操作开销,提升代码执行效率。对于极大量数据(如百万级字符),可考虑分批处理或使用更高效的数据结构。根据输入数据的规模和特征,估算最终字符串的大致长度。对于大数据量的字符串拼接,预分配容量可能带来。构造函数预分配足够的容量,可以。,从而提高字符串拼接的效率。原创 2025-06-10 15:43:43 · 355 阅读 · 0 评论 -
C# 如何从ConcurrentDictionary中获取并移除第二个元素
是无序集合,"第二个元素" 的定义可能依赖于迭代顺序(通常是插入顺序,但不保证)。中获取并移除第二个元素,需要先获取元素的快照,然后尝试移除指定位置的元素。如果需要严格控制元素顺序,建议使用。原创 2025-06-07 09:15:00 · 200 阅读 · 0 评论 -
C# 从 ConcurrentDictionary 中取出并移除第一个元素
C# 从 ConcurrentDictionary 中取出并移除第一个元素要从中取出并移除第一个元素,需要结合和。由于是无序集合,"第一个元素" 通常是指最早添加的元素(按插入顺序)。原创 2025-06-04 17:19:49 · 570 阅读 · 0 评论 -
在 Windows 中使用 IHost 创建和运行 Windows 服务
在 C# 中,使用IHost接口创建 Windows 服务是一种现代且灵活的方式,特别是在 .NET Core 和 .NET 5+ 中。原创 2025-05-31 10:30:00 · 295 阅读 · 0 评论 -
如何处理 ConcurrentDictionary 中已存在的键
在使用时,处理已存在的键通常需要根据业务需求选择合适的方法。原创 2025-05-28 09:20:18 · 337 阅读 · 0 评论 -
如何避免 ConcurrentDictionary 中的键冲突
在使用时,避免键冲突的关键在于和。原创 2025-05-28 09:16:21 · 510 阅读 · 0 评论 -
浅谈C#之内存映射
提供了一种高效的内存映射文件机制,允许将文件或内存区域直接映射到进程的地址空间,从而实现快速的文件读写和进程间通信。:将文件内容映射到虚拟内存中,程序通过指针直接访问,避免了传统I/O的缓冲开销。:.NET Core及以上版本支持Windows/Linux/macOS。:适合处理大文件、随机访问频繁的场景,支持进程间共享数据。:创建时需指定足够的大小,超出将引发异常。:提供随机访问的视图(类似指针操作)。:提供流式访问的视图(类似。需要低延迟的随机文件访问。:表示内存映射文件对象。原创 2025-03-27 10:30:00 · 697 阅读 · 0 评论 -
C# 实现串口通信
在C#中实现串口通信,可以使用类。这个类提供了串口通信的基本功能,包括打开和关闭串口、发送和接收数据等。原创 2025-01-02 10:39:33 · 771 阅读 · 0 评论 -
浅谈C#库之Memcached
Memcached是一个开源的分布式内存缓存系统,由的开发,主要用于动态Web应用以减少数据库负载,提高访问速度和性能。Memcached通过将数据存储在内存中,使用高效的哈希算法进行数据存取,提供极高的读写性能。原创 2024-12-12 08:59:15 · 922 阅读 · 0 评论 -
浅谈C#库之MiniExcel
是一个简单、高效的.NET库,专门用于处理Excel文件的读写和模板填充操作,旨在避免内存溢出(OOM)问题。它通过使用流(Stream)的方式进行底层算法设计,能够显著减少内存占用,通常可以将原本需要1000多MB的内存占用降低到几MB,从而有效避免内存不足的情况。原创 2024-12-12 08:54:07 · 2416 阅读 · 0 评论 -
浅谈C#库之Serilog
Serilog 是一个跨平台的结构化日志库,用于 .NET 应用程序。它支持将日志数据输出成多种格式,包括 JSON,便于进行搜索和分析。Serilog 提供了丰富的配置选项,允许开发者将日志输出到多种目标(Sinks),如控制台、文件、数据库等。原创 2024-12-10 09:05:05 · 1471 阅读 · 0 评论 -
浅谈C#库之Newtonsoft.Json
你可以通过实现// 输出:{"full_name":"John"}// 输出:John自定义return;elseset;原创 2024-12-10 08:59:39 · 2515 阅读 · 0 评论 -
浅谈C#库之DevExpress
DevExpress是一个功能强大、界面美观的UI组件库,广泛应用于桌面应用程序和Web应用程序的开发中。它提供了丰富的控件和工具,帮助开发人员快速构建现代化的用户界面。DevExpress控件库以其功能丰富、应用简便、界面华丽以及方便定制而著称。原创 2024-11-29 10:02:59 · 2207 阅读 · 0 评论 -
浅谈C#库之Memcached
Memcached是一个开源的高性能分布式内存缓存系统,它通过将数据存储在内存中来加速动态Web应用。1、高性能:Memcached使用内存进行数据存储,访问速度极快。2、分布式:支持多节点分布式部署,具备良好的扩展性。3、简单易用:API简单直观,易于集成到各种编程语言中,包括C#。4、轻量级:占用资源少,安装配置简单。原创 2024-11-29 09:57:33 · 696 阅读 · 0 评论 -
浅谈C#之多线程流式适配器
在C#中实现多线程流式适配器,通常涉及到处理并发数据流和确保线程安全。在某些情况下,你可能需要自定义流式适配器来处理特定的协议或数据格式。这通常涉及到解析数据头和数据体,以及处理数据的顺序和完整性。// 记录初始游标位置// 填充header// 回退游标else// 解析数据。原创 2024-11-14 08:48:43 · 1121 阅读 · 0 评论 -
浅谈C#之单线程流式适配器
在C#中,单线程流式适配器通常用于处理流式数据,如网络通信或文件操作中的连续数据流。这些数据流可能是有序的,并且数据包之间可能会发生粘连,即没有明确的分界线,导致粘包和半包问题。解决这些问题的关键在于识别数据包的标识和顺序。在更复杂的应用中,可能需要自定义流式单线程适配器来处理特定的协议或数据格式。这通常涉及到解析数据头和数据体,以及处理数据的顺序和完整性。// 记录初始游标位置,防止本次无法解析时,回退游标。// 此操作实际上有两个作用,// 1.填充header。原创 2024-11-14 08:46:29 · 795 阅读 · 0 评论 -
浅谈C#之内存管理
在C#中,内存管理主要依赖于垃圾回收器(Garbage Collector,简称GC)。垃圾回收器会自动管理内存的分配和释放,但是有时候我们可能需要手动干预内存的释放。原创 2024-11-13 08:56:29 · 621 阅读 · 0 评论 -
浅谈C#处理XML文件
XML),是一种标记语言。标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记,既可以选择国际通用的标记语言,比如HTML,也可以使用像XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。XML是从标准通用标记语言(SGML)中简化修改出来的。它主要用到的有可扩展标记语言、可扩展样式语言(XSL)、XBRL和XPath等。原创 2024-11-12 09:15:48 · 600 阅读 · 0 评论 -
浅谈C#之文件流
文件流是指用于读取和写入文件的流(Stream)。.NET框架提供了多种流类,用于处理不同类型的I/O操作。原创 2024-11-11 09:07:53 · 344 阅读 · 0 评论 -
C# 注册COM组件
1、创建COM组件:首先,你需要创建一个COM组件。这通常意味着创建一个类库项目,并在其中定义你的COM对象。2、设置项目属性:3、使用ComVisible属性:4、定义接口和类:5、生成项目:6、使用RegAsm工具:7、验证注册:8、调用COM组件:原创 2024-10-31 09:10:10 · 1581 阅读 · 0 评论 -
浅谈C#之TuochSocket
TouchSocket 是一个为 .Net(包括 C#、VB.Net、F#)设计的整合性、超轻量级的网络通信框架,它包含了 tcp、udp、ssl、http、websocket、rpc、jsonrpc、webapi、xmlrpc 等一系列的通信模块。它能够一键式解决 TCP 黏分包问题,udp 大数据包分片组合问题等,使用协议模板可以快速实现「固定包头」、「固定长度」、「区间字符」等一系列的数据报文解析。原创 2024-10-30 09:09:19 · 1185 阅读 · 0 评论 -
.NET代码打包加密工具
下载地址:原创 2024-10-29 13:15:16 · 145 阅读 · 0 评论 -
浅谈C#之抽象类、抽象方法
在C#中,抽象类和抽象方法是面向对象编程中的重要概念,它们提供了一种方式来定义一个类的基本框架,但不完全实现它。这允许其他类继承这个框架,并提供具体的实现细节。原创 2024-10-18 08:44:30 · 530 阅读 · 0 评论 -
浅谈C#之SetSocketOption用法
在 C# 中,是一个用于设置套接字(Socket)选项的方法。这个方法定义在类中,允许你配置底层套接字的行为。这些选项可以控制套接字的各种特性,例如超时、缓冲区大小、协议特定的选项等。原创 2024-10-09 15:11:16 · 1172 阅读 · 0 评论 -
浅谈C#之内存缓存
MemoryCache是一个基于内存的缓存服务,它是System.Runtime.Caching命名空间的一部分。它允许开发人员将频繁使用的数据或昂贵的计算结果存储在内存中,以便快速和有效地访问。MemoryCache使用键值对来存储数据,数据在被添加到缓存时会附带一个过期时间。当缓存项目到达其过期时间或者系统在资源压力下时(例如,可用的物理内存太低),该项目会从缓存中删除。原创 2024-09-30 08:42:29 · 884 阅读 · 0 评论 -
浅谈C#之AutoResetEvent和ManualResetEvent
和都是同步原语,它们用于线程之间的协调和通信。它们都是从类派生的,但它们在重置事件状态的行为上有所不同。原创 2024-09-18 08:46:47 · 649 阅读 · 0 评论 -
浅谈C#之SynchronizationContext
是一个抽象类,它提供了一种机制,允许代码与创建它的线程同步。这在UI编程中非常有用,比如在Windows Forms或WPF应用程序中,你可能需要确保某些操作在UI线程上执行,以避免跨线程操作导致的问题。原创 2024-09-18 08:42:52 · 920 阅读 · 0 评论 -
浅谈C#之虚函数和重写
虚函数(Virtual Function)和重写(Override)是面向对象编程中多态性(Polymorphism)的实现方式之一。它们允许子类改变从基类继承来的行为。原创 2024-09-11 08:56:43 · 826 阅读 · 0 评论 -
浅谈C#之抽象类和抽象函数
抽象类和抽象方法是用来表示那些不完整、不能实例化的概念,通常用于定义一个接口或规范,让继承它的子类去实现具体的功能。抽象类不能被实例化。抽象类可以包含抽象方法和非抽象方法。抽象类可以包含字段、构造函数、属性、索引器、事件等。抽象类用关键字abstract来声明。抽象方法是一种没有实现的方法,它只有声明没有方法体。抽象方法用关键字abstract来声明。抽象方法必须在抽象类中声明。继承抽象类的非抽象子类必须实现其所有的抽象方法,除非子类本身也被声明为抽象类。原创 2024-09-11 08:54:15 · 689 阅读 · 0 评论 -
浅谈C#之线程锁
锁是一种同步机制,用于控制多个线程对共享资源的访问。当一个线程获得了锁时,其他线程将被阻塞,直到该线程释放了锁。在并发编程中,多个线程同时访问共享资源可能导致数据竞争和不确定的行为。锁可以确保在任意时刻只有一个线程可以访问共享资源,从而避免竞态条件和数据不一致性问题。原创 2024-09-10 08:53:18 · 1147 阅读 · 0 评论 -
浅谈C#之线程创建和管理
线程是一种并发执行的机制,允许程序同时执行多个任务。线程的使用使得我们能够利用计算机的多核处理器,实现程序的并行执行,提高系统的性能和响应能力。本文将详细介绍C#中线程的定义和使用方法,涵盖线程的创建、启动、同步和管理等方面。线程管理是一个重要的概念,因为多线程编程可以帮助你提高应用程序的性能,特别是在执行耗时的操作时。原创 2024-09-10 08:50:10 · 1179 阅读 · 0 评论 -
浅谈C#之进程
处理进程通常涉及到启动、监控和管理操作系统级别的进程。C#提供了命名空间,其中包含用于创建和管理进程的类。原创 2024-09-09 08:45:24 · 877 阅读 · 0 评论 -
浅谈C#之线程锁
线程锁通常指的是lock关键字,它用于确保当一个线程位于代码的临界区时,其他线程不进入该区。lock通常用于保护共享资源,避免竞争条件。原创 2024-09-09 08:41:29 · 1299 阅读 · 0 评论