C#
C#计算机语言
在路上看风景
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
2.2 特性
特性(Attribute)是c#中的一种特殊的"元数据"机制, 可以将它理解成给代码(类, 方法, 属性, 参数, 程序集等)贴的标签这些标签不会直接影响代码的执行逻辑, 但能为代码附加额外的信息, 程序在运行时/编译时可以读取这些信息a.定义自定义特性类(必须继承System.Attribute, 命名建议以Attribute结尾)b.应用自定义特性到目标元素c.通过反射读取特性的元数据// 1. 定义自定义特性:标记代码作者和创建时间。原创 2026-02-13 15:21:16 · 240 阅读 · 0 评论 -
2.1 反射
1).反射式程序运行时可以看自己的结构(比如: 类, 方法, 属性等), 并能操作这些结构;反射的核心命名空间System.Reflection, 核心类是Type(所有类型信息的入口)2).反射的核心使用场景a.动态创建对象b.动态调用方法c.访问私有成员d.读取自定义特性。原创 2026-02-12 17:33:47 · 306 阅读 · 0 评论 -
3.5 Directory
【代码】3.5 Directory。原创 2026-01-16 15:58:15 · 58 阅读 · 0 评论 -
3.8 BufferedStream
BufferedStream是C# System.IO命名空间下的一个流包装类, 它的核心作用是在内存中创建缓冲区, 减少对磁盘的操作次数从而提升IO性能通俗比喻:直接读写底层流(比如磁盘文件)就像直接用手接水龙头的水, 每次接一点点, 要接很多次;而BufferedStream相当于先拿一个杯子(缓冲区)接水, 接满后再一次性倒到目标容器里, 大大减少了操作次数(IO操作是耗时的物理操作, 减少次数就能提升性能)注:a.默认缓冲区的大小是4096字节。原创 2026-01-16 15:49:29 · 58 阅读 · 0 评论 -
3.7 BinaryReader和BinaryWriter
a.BinaryWriter: 将.NET 基本类型(int、float、string、byte [] 等)写入流(FileStream、MemoryStream等),按二进制格式存储(而非文本), 体积更小、读写更快b.BinaryReader: 从流中读取由BinaryWriter写入的二进制数据, 还原为对应.NET类型, 需严格匹配写入顺序。原创 2026-01-15 16:54:46 · 60 阅读 · 0 评论 -
3.6 MemoryStream
MemoryStream是C#中System.IO 命名空间下的一个类, 它将数据存储在内存中, 而非磁盘文件, 因此读写速度极快, 适合临时处理小量数据(如序列化/反序列化、网络数据中转、内存中操作字节数组等)简单来说:a.普通FileStream操作的是磁盘文件, MemoryStream操作的是内存中的字节数组b.用完后需及时释放内存(通过 using 语句自动释放)原创 2026-01-14 14:09:52 · 103 阅读 · 0 评论 -
3.4 Path
【代码】3.4 Path。原创 2026-01-12 15:39:50 · 245 阅读 · 0 评论 -
3.3 StreamReader/StreamWriter
【代码】3.3 StreamReader/StreamWriter。原创 2026-01-12 15:34:01 · 148 阅读 · 0 评论 -
3.2 FileStream
【代码】3.2 FileStream。原创 2026-01-10 20:01:30 · 239 阅读 · 0 评论 -
3.1 File
【代码】3.1 File。原创 2026-01-09 17:07:54 · 193 阅读 · 0 评论 -
1.17 并行集合
【代码】1.17 并行集合。原创 2025-12-19 11:08:46 · 210 阅读 · 0 评论 -
1.16 PLINQ
PLINQ是LINQ的并行扩展, 核心是通过AsParallel()启用并行查询, 自动将查询任务分发到多线程池, 利用多核CPU提升效率a.PLINQ依赖System.Linq命名空间, 支持内存集合(如List<T>、IEnumerable<T>),不支持LINQ to SQL/EF 等数据库查询b.启用并行(AsParallel), 调用后LINQ查询从"串行"转为"并行"执行// 数据源:1~10000 的整数集合// 【普通 LINQ(串行)】筛选偶数并乘以 2。原创 2025-12-18 16:28:49 · 153 阅读 · 0 评论 -
1.15 并行编程
【代码】1.15 并行编程。原创 2025-12-16 19:48:24 · 929 阅读 · 0 评论 -
1.14 Async和Await
想象一下: 你在不同的场合, 同样是"我饿了", 意思完全不同a.在家说"我饿了" -> 妈妈给你做饭b.在朋友家说"我饿了" -> 朋友给你零食同样一句"我饿了", 因为说的时候环境不同, 结果完全不同编程中的上下文就是当前代码能有的所有东西(变量, 方法, 类, 资源, 环境信息)的集合, 就像你在厨房, 上下文就是厨房里的工具(刀, 锅, 食材), 你能做饭private string name = "全局名字";// 这是类的上下文(成员变量)原创 2025-12-13 15:28:03 · 236 阅读 · 0 评论 -
1.13 Task
1).Task简介Task表示"未来某个时间的承诺"a.同步代码: 就像你去柜台点餐, 必须站在那里一直等到厨师做完, 你拿到餐后才能离开;这期间你什么都干不了(线程阻塞)b.异步Task: 就像你点餐后拿到一个取餐号(Task);你不用傻等, 可以立刻去找座位、玩手机;当餐做好时, 系统会通知你(任务完成), 你再去取Task类表示一个异步操作, 它封装了这个操作的状态(是否完成、是否出错等), 最重要的是,原创 2025-12-07 19:56:29 · 180 阅读 · 0 评论 -
1.12 多线程和异步编程
【代码】1.12 多线程和异步编程。原创 2025-12-05 21:47:22 · 164 阅读 · 0 评论 -
1.11 ThreadPool 线程池
1) . 工作线程a . 简介工作线程被称为后台线程 , 主要用于执行计算密集型或需要长时间处理的任务;它们不会阻塞主线程 , 允许应用程序在后台执行任务的同时保持响应b . 特点 - 用于执行耗时操作 , 如复杂运算 , 数据处理等 - 通常从线程池中获取 , 以避免频繁创建和销毁线程的开销 - 不会阻塞UI线程 , 保持界面流畅2).IO线程不是执行IO操作的线程, 是处理IO完成通知的线程;在C#中, 我们通常不会专门为I/O操作创建单独的线程,而是使用异步I/O操作;原创 2025-12-04 14:24:35 · 218 阅读 · 0 评论 -
1.10 线程其他操作
【代码】1.10 线程其他操作。原创 2025-12-04 13:49:26 · 294 阅读 · 0 评论 -
1.9 线程亲和性, 线程安全,死锁
【代码】1.9 线程亲和性, 线程安全,死锁。原创 2025-11-30 16:45:27 · 153 阅读 · 0 评论 -
1.8 自动重置事件和手动释放事件
【代码】1.8 自动重置事件和手动释放事件。原创 2025-11-29 18:49:16 · 177 阅读 · 0 评论 -
2.4 闭包
【代码】2.4 闭包。原创 2025-11-28 13:05:21 · 176 阅读 · 0 评论 -
1.7 信号量
【代码】1.7 信号量。原创 2025-11-27 14:15:16 · 192 阅读 · 0 评论 -
1.6 读写锁
【代码】1.6 读写锁。原创 2025-11-27 11:34:29 · 198 阅读 · 0 评论 -
2.3 C#装箱和拆箱
【代码】2.3 C#装箱和拆箱。原创 2025-11-21 14:18:57 · 304 阅读 · 0 评论 -
2.2 托管资源和非托管资源
【代码】2.2 托管资源和非托管资源。原创 2025-11-21 10:33:23 · 188 阅读 · 0 评论 -
1.5 Mutex
Mutex 的强大之处在于它是一个系统级别的同步原语, 这意味着它的实现依赖于"操作系统内核"(必须调用Disposable)a.内核对象创建一个Mutex时, Windows操作系统会在内核中为你创建一个"互斥体内核对象", 这个对象有两个核心状态:- signaled(有信号状态): 表示线程可以获取该锁- un-signaled(无信号状态): 表示锁被某个线程占用WaitOne()和ReleaseMutex()就是通过这个系统调用与这个内核对象交互b.线程等待队列。原创 2025-11-21 10:13:12 · 197 阅读 · 0 评论 -
1.4 Monitor 监控器
Monitor是.Net中提供线程同步的机制, 它使用对象锁来实现互斥访问, 并且提供了等待和通知的机制(Wait和Pulse/PulseAll)1).锁对象(Sync Block)a.在.Net中, 每个对象都有一个同步块索引(Sync Block Index), 该索引指向一个同步块(Sync Block);同步块中包含了用于同步的信息, 如持有锁的线程, 等待队列等b.当我们使用Monitor.Enter(obj)时, CLR会检查该对象的同步块索引, 如果没有同步块, 则会分配一个;原创 2025-11-20 14:00:39 · 328 阅读 · 0 评论 -
2.1 迭代器
【代码】2.1 迭代器。原创 2025-11-19 16:42:59 · 218 阅读 · 0 评论 -
1.3 线程同步
【代码】1.3 线程同步。原创 2025-11-19 15:28:49 · 209 阅读 · 0 评论
分享