在dotnet6内置了通过源代码生成的方式进行序列化JSON对象,性能非常高。使用的时候需要将Json序列化工具类换成dotnet运行时自带的System.Text.Json进行序列化,再加上一个继承JsonSerializerContext的辅助类型,且在此类型标记JsonSerializableAttribute特性,将此类型传入序列化和反序列化即可完成对接。然而在使用的过程中,如果发现此辅助类型的实际代码没有生成,且输出提示SYSLIB1032警告,那可能就是此辅助类型没有写对导致如官方文档的对SYSLIB1032的描述,这是由于标记了JsonSerializableAttribute的
本文将告诉大家,在dotnet6或dotnet7版本里,启动新的进程时,在StartInfo设置UseShellExecute为true和false时,对性能的影响在dotnet6或dotnet7版本里,其他的版本我没有测试和去了解哈,启动新的进程时,在StartInfo设置UseShellExecute为true时,且当调用线程非STA时,在Windows下,性能会较差为什么性能会比较差?下面将从dotnet源代码的角度来告诉大家开始之前,回顾一下UseShellExecute属性的作用,在Process.Start里,是允许调用Shell打开进程的,传入的不一定要求是一个exe等可执行文件
本文将告诉大家,在dotnet6或dotnet7版本里,启动新的进程时,在StartInfo设置UseShellExecute为true和false时,对性能的影响在dotnet6或dotnet7版本里,其他的版本我没有测试和去了解哈,启动新的进程时,在StartInfo设置UseShellExecute为true时,且当调用线程非STA时,在Windows下,性能会较差为什么性能会比较差?下面将从dotnet源代码的角度来告诉大家开始之前,回顾一下UseShellExecute属性的作用,在Process.Start里,是允许调用Shell打开进程的,传入的不一定要求是一个exe等可执行文件
大家都知道,在dotnet里的Debug下和Release下的一个最大的不同是在Release下开启了代码优化。启用代码优化,将会对生成的IL代码进行优化,同时优化后的IL也会有一些运行时的更多优化。内联是一个非常常用的优化手段,内联将会让StackTrace获取的调用堆栈存在Debug下和Release下的差异,从而导致获取方法标记的Attribute特性不能符合预期工作这一个坑是来源于我所在团队开源的CUnit(中文单元测试框架)仓库的一次单元测试过程,我发现了在Debug下能通过测试,但是在Release下失败。详细请看:https://github.com/dotnet-campus/
大家都知道,在dotnet里的Debug下和Release下的一个最大的不同是在Release下开启了代码优化。启用代码优化,将会对生成的IL代码进行优化,同时优化后的IL也会有一些运行时的更多优化。内联是一个非常常用的优化手段,内联将会让StackTrace获取的调用堆栈存在Debug下和Release下的差异,从而导致获取方法标记的Attribute特性不能符合预期工作这一个坑是来源于我所在团队开源的CUnit(中文单元测试框架)仓库的一次单元测试过程,我发现了在Debug下能通过测试,但是在Release下失败。详细请看:https://github.com/dotnet-campus/
在设置了InvariantGlobalization为true之后,将会发现原本能正常工作的XAML可能就会抛出异常。本文将告诉大家此问题的原因这是有开发者在WPF仓库上给我报告的bug我才找到的问题。问题的现象是XAML抛出异常,步骤有些复杂:升级到dotnet6版本。因为此问题是在dotnet6下才能复现,在dotnet6以下,如dotnet5和dotnetcore3.1是没有问题的要求设置InvariantGlobalization为true的值在XAML绑定静态的非字符串类型的属性,例如int类型的属性,如以下代码这是MainWindow.xaml.cs的代码:usingSystem.
在设置了InvariantGlobalization为true之后,将会发现原本能正常工作的XAML可能就会抛出异常。本文将告诉大家此问题的原因这是有开发者在WPF仓库上给我报告的bug我才找到的问题。问题的现象是XAML抛出异常,步骤有些复杂:升级到dotnet6版本。因为此问题是在dotnet6下才能复现,在dotnet6以下,如dotnet5和dotnetcore3.1是没有问题的要求设置InvariantGlobalization为true的值在XAML绑定静态的非字符串类型的属性,例如int类型的属性,如以下代码这是MainWindow.xaml.cs的代码:usingSystem.
本文属于dotnet代码优化系列博客。相信大家都对圈复杂度这个概念很是熟悉,本文来和大家聊聊逻辑的圈复杂度。代码优化里面,一个关注的重点在于代码的逻辑复杂度。一段代码的逻辑复杂度越高,那么维护起来的难度也就越大。衡量代码的逻辑复杂度的一个维度是通过逻辑圈复杂度进行衡量。本文将告诉大家如何判断代码的逻辑圈复杂度以及一些降低圈复杂度的套路,让大家了解如何写出更好维护的代码回顾一下代码设计的目标,其中一个很重要的点就是解决复杂的代码逻辑和人类有限的智商的矛盾。假设人类的智商非常的高,无论再复杂的代码逻辑都能理解,且人类写出的逻辑也不存在漏洞,那其实很多代码设计都是不需要的。现实刚好不是,一个稍微复杂
本文属于dotnet代码优化系列博客。相信大家都对圈复杂度这个概念很是熟悉,本文来和大家聊聊逻辑的圈复杂度。代码优化里面,一个关注的重点在于代码的逻辑复杂度。一段代码的逻辑复杂度越高,那么维护起来的难度也就越大。衡量代码的逻辑复杂度的一个维度是通过逻辑圈复杂度进行衡量。本文将告诉大家如何判断代码的逻辑圈复杂度以及一些降低圈复杂度的套路,让大家了解如何写出更好维护的代码回顾一下代码设计的目标,其中一个很重要的点就是解决复杂的代码逻辑和人类有限的智商的矛盾。假设人类的智商非常的高,无论再复杂的代码逻辑都能理解,且人类写出的逻辑也不存在漏洞,那其实很多代码设计都是不需要的。现实刚好不是,一个稍微复杂
本文告诉大家如何使用OpenXML解析PPT的图表,以面积图为入门例子告诉大家OpenXML的存储在PPT里面,有强大的图表功能,可以联动Excel展示数据。在PPT里面的图表和Excel的图表稍微有一些差别,本文只聊PPT的图表如下图是本文将作为例子的图表对应的数据如图如上图可以看到在PPT里面的图表是可以使用Excel的数据,将Excel文件内嵌到PPT里面。但这不代表要解析图表的数据就一定需要先了解Excel的内容,本文将绕过对Excel的任何读取,通过PPT里面的内容拿到图表的数据图表的组成开始之前,还请先让我告诉大家一个图表元素包含的基础组件部分,也就是图表元素由哪些部分组成横坐标轴