5 月 21 号到 23 号是一年一度的 Microsoft Build 大会。大会中会涉及到很多 .NET
相关的内容,包括 Aspire
, AI
与 .NET
, Visual Studio
等相关内容,如果感兴趣,可以线上加入。
Avalonia 团队宣布离开 .NET Foundation
, 主要原因是想要让项目的主导权保留在开发核心团队。至于说具体的原因导致这次分手,声明中并没有提及,不过这篇文章指出了 .NET Foundation
存在的问题和可能的解决方案。
.NET
团队成员的 Twitter
账号列表,关注他们,获得最新的资讯。
3、Twitter Azure Cloud Advocates 列表
Azure Cloud Advocates
团队成员的 Twitter
账号列表,关注他们,获得最新的资讯。
Span<T>
是高性能 C#
代码的秘诀之一,.NET
社区大佬 Stephen Toub
深入探究了什么是 Span
并且从头完成一个简易版的实现。
首先 Span<T>
要解决什么问题?假设我们现在有一个方法是这样的:
private int Sum(int[] array)
{
int sum = 0;
foreach(var val in array) sum += val;
return sum;
}
如果 Sum
方法的是求和数组的部分内容,那么方法的签名需要修改成这样
private int Sum(int[] array, int offset, int length)
{
int sum = 0;
for(int i = offset; i < length; i++) sum += array[offset+i];
return sum;
}
这样会带来一个问题,就是这个方法只支持 int[]
数据类型,而 C#
中有很多类型都是表示连续的一段空间,比如 List
。所以 Span
这个类型结构就被提出来了,如果仅仅是表示一段连续空间,Span
并没有什么特殊之处,C/C++
中的指针,或者 C#
中的 unsafe
代码块也能够完成同样的工作,但是 Span
是内存安全的类型,而且还是一个值类型。
readonly ref struct MySpan<T>
{
private readonly ref T _reference;
private readonly int _length;
public MySpan(T[] array)
{
_reference = ref MemoryMarshal.GetArrayDataReference(array);
_length = array.Length;
}
public MySpan(ref T reference)
{
_reference = ref reference;
_length = 1;
}
public MySpan(ref T reference, int length)
{
_reference = ref reference;
_length = length;
}
public ref T this[int index]
{
get
{
if (index < 0 || index >= _length)
{
throw new IndexOutOfRangeException();
}
return ref Unsafe.Add(ref _reference, index);
}
}
public MySpan<T> Slice(int offset)
{
if (offset < 0 || offset >= _length)
{
throw new IndexOutOfRangeException();
}
return new MySpan<T>(ref Unsafe.Add(ref _reference, offset), _length - offset);
}
}
ref struct
表明它只能用在方法中,而不能作为一个类的成员ref T _reference
指向了连续空间的第一个元素ref T this[int index]
说明连续空间的每个元素获取都是引用类型Unsafe.Add
该方法避免了访问非法内存
Nullable Reference Type
是 C# 8
引入新的语法,它可以解决我们应用程序中的 System.NullReferenceException
的异常。但是从来没有银弹,这个工作需要程序在编译时候付出额外的付出。那么如何将已有的项目中开启这个功能呢?这个幻灯片介绍了其中的概念,方法和工具。
3、JavaScript, TypeScript, C#代码实现对比
对于前端开发人员,JavaScript
或者 TypeScript
是两个非常熟悉的开发编程语言。但是 C#
这种后端开发语言和 JavaScript
或者 TypeScript
却越来越像,它们在语法,工具链上面相互学习。
.NET 9
中将会移除之前内置的 Swagger
,并且全面拥抱 OpenAPI
。那么以后就不会有 Swagger 页面,只有一个 Web API 定义的 JSON 文件,但是 Scalar 项目可以将其渲染成漂亮的 UI。
.NET 9
在 Linq 上继续有新的性能上的更新
Orderby.ToList
通过 Vector
这个 SIMD 指令集提升
Chunk
通过 ReadOnlySpan
提升性能
OfType
通过处理特定的类型而不是通用的类型
Any
通过调用 TryGetNonEnumeratedCount
方法提高性能
TeslaLogger 是一个自托管的数据记录器,适用于您的 Tesla Model S/3/X/Y。目前,它支持 Raspberry Pi 3B、3B+、4B、Docker 和 Synology NAS。
2、ILGPU
ILGPU 是一个即时编译器(JIT),用于编写高性能 GPU 程序的 .NET 语言。ILGPU 完全用 C# 编写,没有任何本地依赖。它结合了 C++ AMP 的灵活性和便利性,以及 CUDA 程序的高性能。内核范围内的函数不需要注解(默认 C# 函数),并且可以作用于值类型。所有内核(包括共享内存和原子操作等硬件特性)都可以使用集成的多线程 CPU 加速器在 CPU 上执行和调试。
3、以太坊.NET库
Nethereum 是 .NET 的以太坊集成库,简化了与公共或许可的以太坊节点(如 Geth、Parity 或 Quorum)的访问和智能合约交互。
Binance.Net 是一个强类型的客户端库,用于访问 Binance 的 REST 和 Websocket API。所有数据都映射到可读的模型和枚举值。其他功能包括实现客户端订单簿维护、与其他交易所客户端库的轻松集成等。