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> 可以避免不必要的内存拷贝,从而提高性能。

2023-04-17
C#
00

引言

深拷贝是指创建一个新对象,该对象的值与原始对象完全相同,但在内存中具有不同的地址。这意味着如果您对原始对象进行更改,则不会影响到复制的对象

引言

哨兵思想是指在算法中使用一个特殊值来检测或标记某些条件的发生,它的目的是为了简化代码,并使其更容易理解,常常用于在循环中优化边界条件的判断。