摘要: ## 定义 [函数式编程](https://baike.baidu.com/item/%E5%87%BD%E6%95%B0%E5%BC%8F%E7%BC%96%E7%A8%8B/4035031#ref_[1]_1711147)是种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算 阅读全文
posted @ 2023-08-07 17:47 NiueryDiary 阅读(19) 评论(0) 推荐(0) 编辑
摘要: ## 引言 `Span` 是C# 中的一种结构体,它是一种内存安全的类型,可以用来表示连续的内存区域。`Span` 可以被用于访问和操作数组、堆上分配的内存和栈上分配的内存。使用 `Span` 可以避免不必要的内存拷贝,从而提高性能。 ## 对数组使用Span 如果需要快速访问托管或非托管的连续内存 阅读全文
posted @ 2023-08-07 08:17 NiueryDiary 阅读(1957) 评论(7) 推荐(12) 编辑
摘要: ## 引言 在实际开发场景中,当ViewModel内的一个属性是一个 `ObservableCollection` 或者是一个多层级 `class` 的时候,有可能有的需求需要 `ObservableCollection`内的元素的子属性或多层级 `class` 的子属性,甚至子属性的子属性,变化, 阅读全文
posted @ 2023-08-05 09:02 NiueryDiary 阅读(241) 评论(0) 推荐(0) 编辑
摘要: ## 引言 今天同事问了我一个问题,`System.Windows.Forms.Timer`是前台线程还是后台线程,我当时想的是它是跟着UI线程一起结束的,应该是前台线程吧? 我确实没有仔细研究过他们的异同,所以带着这个疑问探究一下`System.Windows.Forms.Timer`。 ## S 阅读全文
posted @ 2023-08-04 09:37 NiueryDiary 阅读(517) 评论(0) 推荐(8) 编辑
摘要: ## 引言 现在模拟一个异步方法抛出了异常: ```csharp public static async Task ThrowAfter(int ms, string message) { await Task.Delay(ms); throw new Exception(message); } ` 阅读全文
posted @ 2023-07-31 08:13 NiueryDiary 阅读(857) 评论(0) 推荐(3) 编辑
摘要: ## 引言 **dynamic** 是 `Framework 4.0` 就出现特性,它的出现让 C# 具有了弱语言类型的特性。编译器在编译的时候不再对类型进行检查,默认 **dynamic** 对象支持开发者想要的任何特性。 ## dynamic 介绍 在C#中,dynamic是一种类型,它允许你在 阅读全文
posted @ 2023-07-24 12:06 NiueryDiary 阅读(894) 评论(4) 推荐(2) 编辑
摘要: ## 介绍 今天介绍一个非常强大的基于.Net 的基准测试工具[BenchmarkDotNet](https://github.com/dotnet/BenchmarkDotNet)。 **BenchmarkDotNet** 已经被14300多个项目采用,包括非常多的知名开源项目,例如 - dotn 阅读全文
posted @ 2023-07-21 13:41 NiueryDiary 阅读(537) 评论(0) 推荐(0) 编辑
摘要: ## 引言 汇总一下所有的 .NET IL 指令,以及它们的名称、操作码值、堆栈转换行为和描述。 作为反编译IL代码时的查询字典。 ## IL 指令集列表 以下内容来自[微软官方文档](https://learn.microsoft.com/en-us/dotnet/api/system.refle 阅读全文
posted @ 2023-07-21 08:51 NiueryDiary 阅读(393) 评论(0) 推荐(0) 编辑
摘要: ## 引言 先不论什么是闭包,什么是闭包陷阱,我们开篇先看一段代码: ```csharp static void Main(string[] args) { List lists = new List(); for (int i = 0; i { Console.WriteLine(i); }; l 阅读全文
posted @ 2023-07-19 16:31 NiueryDiary 阅读(544) 评论(0) 推荐(6) 编辑
摘要: ## 引言 众所周知,使用线程可以极大的提高应用程序的效率和响应性,提高用户体验,但是不可以无节制的使用线程,为什么呢? ## 线程的开销 线程的开销实际上是非常大的,我们从空间开销和时间开销上分别讨论。 ### 线程的空间开销 线程的空间开销来自这四个部分: 1. 线程内核对象(Thread Ke 阅读全文
posted @ 2023-07-18 19:08 NiueryDiary 阅读(870) 评论(0) 推荐(7) 编辑