2023-04-22
桌面应用
00

引言

在实际开发场景中,当ViewModel内的一个属性是一个 ObservableCollection<T> 或者是一个多层级 class 的时候,有可能有的需求需要 ObservableCollection<T>内的元素的子属性或多层级 class 的子属性,甚至子属性的子属性,变化,需要通知到ViewModel,该怎么做呢?

2023-04-21
并发编程
00

介绍

CAS(Compare And Swap) 是一种无锁算法的实现手段,中文名称为比较并交换。它由 CPU 的原子指令实现,可以在多线程环境下实现无锁的数据结构。

2023-04-17
C#
00

引言

TaskValueTask都是用于异步编程的类型。它们都表示一项异步操作的结果,并可以在操作完成后检索该结果。

Task是.NET Framework中异步编程模型(APM)的核心类型之一。它是一个通用类型,可表示任何类型的异步操作。通过使用Task,您可以开始执行异步操作并返回一个表示该操作的任务,然后可以等待该任务以获取操作结果。Task还提供了各种方法来管理任务的执行,例如等待多个任务完成、取消任务等等。

ValueTask与Task不同,ValueTask是一个值类型,而不是一个引用类型。在创建和处理ValueTask时,不需要分配额外的堆内存。如果异步操作非常快速并且几乎总是同步完成,则ValueTask可能比Task更有效率。但是,对于较长时间运行的异步操作,使用ValueTask可能会导致性能下降,因为它可能需要分配堆内存来存储大量的状态信息。

2023-04-17
C#
00

引言

表达式树(Expression Tree) 是C#中的一个重要概念。它可以表示代码中的表达式,比如函数调用、算数运算等。 表达式树允许我们在运行时对表达式进行解释执行、转换和编译。可以用于创建动态查询、编码 LINQ 表达式、序列化代码等。

2023-04-17
C#
00

引言

Span<T> 是C# 中的一种结构体,它是一种内存安全的类型,可以用来表示连续的内存区域。Span<T> 可以被用于访问和操作数组、堆上分配的内存和栈上分配的内存。使用 Span<T> 可以避免不必要的内存拷贝,从而提高性能。