草庐IT

dotnet-cli

全部标签

dotnet 谨慎在静态构造函数里使用锁

在dotnet的最佳实践里面,不推荐在静态构造函数里面包含复杂的逻辑,其中也就包含了本文聊的和多线程相关的锁的使用。最佳做法是尽量不要在静态构造函数里面碰到任何和锁以及多线程安全相关的逻辑。本文来告诉大家,在静态构造函数里面使用锁将带来的问题以及原因在.NET的设计里面,一个类型的静态构造函数,是在此类型第一次被碰到时将会被CLR调用。调用的时候,只允许一个线程执行进入静态构造函数,换句话说是一个类型的静态构造函数不会重复被多个线程执行,只会被执行一次。如此即可保证静态构造函数的安全性不同于实例构造函数,实例构造函数大部分由代码里面的new关键词触发,执行代码的仅有一个线程。如果多个线程调用n

dotnet 谨慎在静态构造函数里使用锁

在dotnet的最佳实践里面,不推荐在静态构造函数里面包含复杂的逻辑,其中也就包含了本文聊的和多线程相关的锁的使用。最佳做法是尽量不要在静态构造函数里面碰到任何和锁以及多线程安全相关的逻辑。本文来告诉大家,在静态构造函数里面使用锁将带来的问题以及原因在.NET的设计里面,一个类型的静态构造函数,是在此类型第一次被碰到时将会被CLR调用。调用的时候,只允许一个线程执行进入静态构造函数,换句话说是一个类型的静态构造函数不会重复被多个线程执行,只会被执行一次。如此即可保证静态构造函数的安全性不同于实例构造函数,实例构造函数大部分由代码里面的new关键词触发,执行代码的仅有一个线程。如果多个线程调用n

WPF dotnet 6 开启 PM v2 的 DPI 感知 导致触摸线程访问 UI 属性抛异常

本文记录一个WPF在dotnet6的一个已知问题,且此问题我已修复提交给官方仓库。这是一个只有在dotnet6框架下,非dotnet5也非.NETCore3.1也非.NETFramework的问题,要求开启DPI感觉等级为PerMonitorV2的特性,在带触摸屏上的应用,应用运行过程中,切换屏幕的DPI之后,触摸过程有概率触发在触摸线程访问UI的依赖属性,在触摸线程抛出异常炸掉应用条件必须同时满足以下条件:dotnet6:dotnet6.0.1及以上版本dotnet5和.NETCore3.1和.NETFramework没有此问题,这是新改出来的,细节请参阅原理部分应用开启PerMonitor

WPF dotnet 6 开启 PM v2 的 DPI 感知 导致触摸线程访问 UI 属性抛异常

本文记录一个WPF在dotnet6的一个已知问题,且此问题我已修复提交给官方仓库。这是一个只有在dotnet6框架下,非dotnet5也非.NETCore3.1也非.NETFramework的问题,要求开启DPI感觉等级为PerMonitorV2的特性,在带触摸屏上的应用,应用运行过程中,切换屏幕的DPI之后,触摸过程有概率触发在触摸线程访问UI的依赖属性,在触摸线程抛出异常炸掉应用条件必须同时满足以下条件:dotnet6:dotnet6.0.1及以上版本dotnet5和.NETCore3.1和.NETFramework没有此问题,这是新改出来的,细节请参阅原理部分应用开启PerMonitor

vue-cli学习

vue-cli使用1.在终端下运行如命令创建指定名称的项目vuecreate项目名称*创建一个新的cli项目2.vue项目中的src目录构成:1.|assets文件夹:存放项目中的静态资源文件,例如css,图片资源2.|components文件夹程序员封装的,可以复用的组件,都要放到components目录下3.|main.js项目的入口文件整个项目的运行,都要先执行main.js4.|app.vue是项目的根组件写的什么结构就会显示什么结构esline空格语法报错'space-before-function-paren':['error','never']组件默认导出exportdefaul

vue-cli学习

vue-cli使用1.在终端下运行如命令创建指定名称的项目vuecreate项目名称*创建一个新的cli项目2.vue项目中的src目录构成:1.|assets文件夹:存放项目中的静态资源文件,例如css,图片资源2.|components文件夹程序员封装的,可以复用的组件,都要放到components目录下3.|main.js项目的入口文件整个项目的运行,都要先执行main.js4.|app.vue是项目的根组件写的什么结构就会显示什么结构esline空格语法报错'space-before-function-paren':['error','never']组件默认导出exportdefaul

dotnet 6 修复在 System.Text.Json 使用 source generation 源代码生成提示 SYSLIB1032 错误

在dotnet6内置了通过源代码生成的方式进行序列化JSON对象,性能非常高。使用的时候需要将Json序列化工具类换成dotnet运行时自带的System.Text.Json进行序列化,再加上一个继承JsonSerializerContext的辅助类型,且在此类型标记JsonSerializableAttribute特性,将此类型传入序列化和反序列化即可完成对接。然而在使用的过程中,如果发现此辅助类型的实际代码没有生成,且输出提示SYSLIB1032警告,那可能就是此辅助类型没有写对导致如官方文档的对SYSLIB1032的描述,这是由于标记了JsonSerializableAttribute的

dotnet 6 修复在 System.Text.Json 使用 source generation 源代码生成提示 SYSLIB1032 错误

在dotnet6内置了通过源代码生成的方式进行序列化JSON对象,性能非常高。使用的时候需要将Json序列化工具类换成dotnet运行时自带的System.Text.Json进行序列化,再加上一个继承JsonSerializerContext的辅助类型,且在此类型标记JsonSerializableAttribute特性,将此类型传入序列化和反序列化即可完成对接。然而在使用的过程中,如果发现此辅助类型的实际代码没有生成,且输出提示SYSLIB1032警告,那可能就是此辅助类型没有写对导致如官方文档的对SYSLIB1032的描述,这是由于标记了JsonSerializableAttribute的

dotnet 6 创建进程 Process.Start 时设置 UseShellExecute 在 Windows 下对性能的影响

本文将告诉大家,在dotnet6或dotnet7版本里,启动新的进程时,在StartInfo设置UseShellExecute为true和false时,对性能的影响在dotnet6或dotnet7版本里,其他的版本我没有测试和去了解哈,启动新的进程时,在StartInfo设置UseShellExecute为true时,且当调用线程非STA时,在Windows下,性能会较差为什么性能会比较差?下面将从dotnet源代码的角度来告诉大家开始之前,回顾一下UseShellExecute属性的作用,在Process.Start里,是允许调用Shell打开进程的,传入的不一定要求是一个exe等可执行文件

dotnet 6 创建进程 Process.Start 时设置 UseShellExecute 在 Windows 下对性能的影响

本文将告诉大家,在dotnet6或dotnet7版本里,启动新的进程时,在StartInfo设置UseShellExecute为true和false时,对性能的影响在dotnet6或dotnet7版本里,其他的版本我没有测试和去了解哈,启动新的进程时,在StartInfo设置UseShellExecute为true时,且当调用线程非STA时,在Windows下,性能会较差为什么性能会比较差?下面将从dotnet源代码的角度来告诉大家开始之前,回顾一下UseShellExecute属性的作用,在Process.Start里,是允许调用Shell打开进程的,传入的不一定要求是一个exe等可执行文件