C#/.NET
文章平均质量分 51
C#/.NET相关
飞翔的烤鸡翅
不吃肉不开心不睡觉不开心的立志成为海贼王的普通文艺的二笔青年。
展开
-
[.NET学习笔记] - Thread.Sleep与Task.Delay在生产中应用的性能测试
3个指令,1秒间隔,理想状态下,完成耗时应是2秒。且随着对象个数增多,仍然能保持在一个合理范围。内部有专门的消费线程执行传入的指令。每个指令的执行间隔为。我们更改参数,比较两者的cpu占用情况。cpu: AMD 3700x 8核16线程。即多个指令输入该服务后对象后,是在时间消耗上比较符合期望。cpu占用情况如图。cpu占用情况如图。原创 2023-09-07 19:39:45 · 850 阅读 · 0 评论 -
[.NET学习笔记] -.NET6.0项目动态加载netstandard2.0报错但项目添加引用则正常的问题
这个提问跟我的情况基本相同。原创 2023-08-16 20:01:12 · 1113 阅读 · 0 评论 -
[.NET学习笔记] - web邮箱浏览显示正常但通过IMAP接收邮件,附件名中文乱码的解决方案
场景当前在使用.NET的mailkit包接收邮箱邮件,使用IMAP协议。主要解析接收到的邮件的基本信息,如主题,发件人,收件人,附件下载等。使用过程中出现了附件文件名中文乱码的情况。具体为:访问web邮箱,在网页端查看问题邮件是正常的。邮件内容均为中文,主题,附件名等,且正常显示。但是通过mailkit解析到的邮件数据中,主题subject中文显示正常,附件文件名attachment-filename显示乱码。如图。起初我以为是mailkit这个包的问题,于是我改用python+imbox解析同原创 2021-12-08 17:16:33 · 3724 阅读 · 4 评论 -
[.NET学习笔记] - 《五个 .NET 性能小贴士》阅读小结
《五个 .NET 性能小贴士》 https://mp.weixin.qq.com/s/PqZSAjenNS84XZ9N2pYfkw《5 Performance Tips For .Net Developers》 https://hackernoon.com/5-performance-tips-for-net-developers-q03w356w?utm_content=buffer8ad81&utm_medium=social&utm_source=linkedin.com&.原创 2021-07-22 10:34:56 · 129 阅读 · 0 评论 -
[C#] - 实现.NET项目引用根据x86/x64与Debug/Release动态引用第三方dll
场景基于visual studio项目有编译多平台的需求,即需要支持编译成x86与x64。项目在solution里直接引用其他的项目时,可以不用考虑这个问题,因为在Build Dependencies时会根据依赖顺序流式编译,并保持相同的编译参数。项目在引用第三方dll时,一般都是通过Add reference+broiswer选择对应的dll,而这样就是明确指定了编译类型。方案在添加了dll后,修改项目配置文件。xxx.csproj。在·<ItemGroup> / <原创 2021-06-23 16:59:11 · 3699 阅读 · 0 评论 -
[.NET学习笔记] - Marshal.PtrToStructure性能浅析
Marshal.PtrToStructure是.Net里用于将非托管内存数据转成托管数据类型的方法。Marshals data from an unmanaged block of memory to a newly allocated managed object of the specified type.一般常用的方法有:IntPtr ptr = xxxx;Data data = new Data();object obj = data;// ptr ====> data//原创 2021-05-18 19:36:40 · 2008 阅读 · 0 评论 -
中文字符串分割的一些思路
场景工作中需要发送文本消息,这里的文本主要指含有中文的字符串。在很多网络服务接口中,假设发送短信,接口要求单次只接受utf-8格式的文本,并限制了文本长度,例如1024个byte大小的数据包。随即就衍生出两个问题:中文字符串的长度计算。字符串过长需要截断发送。其他:本文是做一个思路分析,在任何语言上都是相通的。本文仅使用C#语言做示范。分析中文字符串的长度计算本文所有的长度,均以字节byte为计算单位。示例:string s1 = "123456";string s2 = "12原创 2021-05-15 01:15:39 · 2934 阅读 · 1 评论 -
[WPF学习笔记] - ComboBox的一些应用实现
默认显示数据第一项代码实现comboBox.ItemsSource = Data;comboBox.DisplayMemberPath = "Key"; // if data is dictcomboBox.SelectedValuePath = "Value"; // if data is dictcomboBox.SelectedItem = comboBox.Items[0];XAML实现 <ComboBox DisplayMemberPath="Key" S原创 2021-03-19 00:23:41 · 2705 阅读 · 0 评论 -
[WPF学习笔记] - Height/Width中“Auto”与“*”的区别
概述对于WPF(特指xaml)中的Width,Height,有如下特点。数值,则表示绝对长宽。*,表示除去固定后剩余部分的相对长宽。按比例分配。数字缺省,则默认是1。Auto,根据控件的大小自适应。受左右对齐等方式的影响。示例非固定部分有剩余非固定部分无剩余...原创 2021-02-24 15:18:38 · 3517 阅读 · 0 评论 -
[.NET学习笔记] - C++/CLI项目迁移至.NET5.0时Marshal::StructureToPtr的性能问题
背景手头上有个C++/CLI项目,主要是用来封装C++的dll,方便.NET调用的。之前是在.NET FW 4.8 runtime上,最近想迁移至.NET Core runtime。当前的时间点有两个选择,一个是.NET Core 3.1,一个是.NET 5.0。一个是LTS版,一个是新鲜出炉版。没有多想,觉得.NET 5.0虽然很新,有很多坑不稳定,但不至于被我踩上,加上网上吹的那么多性能提升,首选了升级至.NET 5.0。C++/CLI项目的migrateC++/CLI项目从.NET FW 迁移至原创 2021-02-18 14:31:52 · 2967 阅读 · 0 评论 -
[WPF学习笔记] -DataGrid表格导出数据
场景用WPF做windows desktop app桌面开发,需要将一个表格界面的数据全量导出,这里特别要求是Excel格式。这里的表格控件我用的是DataGrid,在xaml文件中使用ItemSource进行Binding。手动生成列Column,每一列都指定Binding对应的属性。要导出DataGrid的数据,一般是两个步骤。获取DataGrid所有Cell的Value。(Row与Column指定唯一的Cell)。本文主要讨论这一步骤。导出数据,生成数据文件。一般有csv,json,xls,原创 2021-02-09 10:03:03 · 4034 阅读 · 0 评论 -
[VS] - ASP.NET Core 3.1项目迁移至.NET 5时Warning Level报错
场景最近将手头的一个项目,从.NET Core 3.1 迁移至.NET 5。整个迁移需要的改动不多,基本上就是修改下TargetFramework,以及升级对应的package到支持.NET 5的版本。最后在ASP.NET Core MVC项目运行时,出现Warning Level的错误。错误如图:CS1900 Warning level must be in the range 0-43.1时,这个Warning leve是4,现在变成5了。尝试修改回4,无法成功,总是自动变回来。解决方案原创 2020-12-24 23:51:52 · 562 阅读 · 0 评论 -
[.NET学习笔记] - 在ASP.NET Core MVC中使用Blazor组件
场景.NET5发布了,突然对Blazor有了点兴趣,想尝尝鲜。Blazor有两种模式,server-side与client-side(WASM)。这里打算在已有的MVC项目中使用Blazor组件,所以用的server-side。use blazor component in ASP.NET Core 3.1 MVC。解决方案step1startup.cs配置。// ConfigureServicesservices.AddServerSideBlazor();services.AddAnt原创 2020-12-24 14:56:07 · 1849 阅读 · 5 评论 -
[vs] - Visual Studio 2019 诊断工具无法启动的解决方案
开发环境Win10 20H2Visual Studio 2019错误信息运行vs进行debug,没有如往常一样看到诊断工具(Diagnostic tools)运行。显示未能如预期启动或一直处于启动中。英文错误信息为:The diagnostic tools failed unexpectedly.解决方案使用vs的Get Tools and Features功能重装debug模块。检查DiagnosticsHubMsg.dll是否缺失(需匹配语音)。检查vs执行程序devenv.exe原创 2020-12-07 10:59:12 · 13698 阅读 · 5 评论 -
[C#学习笔记] - dynamic跨程序集无法获取匿名类属性的思考及解决方案
场景有个需求,需要传动态参数,想到了匿名类。但在实际操作中,dynamic类型无法获取属性值。// Assembly_Apublic class Client{ public void OnMessage(dynamic msg) { Console.WriteLine(msg.Date); }}// Assembly_Bpublic class Server{ public void SendMessage(dynamic msg) { var c = new Clie原创 2020-08-28 18:24:34 · 1586 阅读 · 0 评论 -
[C#学习笔记] - typeof与GetType()的区别
相同点两者的返回值都是Type类型。https://docs.microsoft.com/zh-cn/dotnet/api/system.type?view=netcore-3.1区别typeof是关键字,GetType是方法。typeof用于类型,即class。GetType用于实例,即class instace。public interface Animal{}public class Dog : Animal{}public class Cat : Animal{}i原创 2020-05-20 11:42:45 · 218 阅读 · 0 评论 -
[C#学习笔记] - await/async 异步
await/async 关键字组合是C#中异步实现的一种常用方式。async用于修饰方法,表明该方法为异步方法。异步方法的放回类型必须为void或Task或Task<TResult>中的一种。异步方法内必须含有await,用于表示异步等待的位置。虽然不太恰当,但有点类似debug中的断点。若“异步方法”内没有await,则该方法不是异步方法,仍为同步模式。await后只能修饰Task或Task<TResult>。(方法的返回类型或变量类型)await task的内容等价原创 2020-05-13 10:58:58 · 519 阅读 · 0 评论 -
【部署】Windows 安装 .Net Core SDK/Runtime 及Server 2008 R2的处理
错误描述In the process of installing Microsoft .NET Core SDK 3.0.100-preview, error ocurred and prompted "A file that is required cannot be installed because the cabinet file C:\ProgramData\Package Cache...原创 2019-10-17 17:08:01 · 4038 阅读 · 0 评论 -
[C#学习笔记] - 静态构造函数与静态成员初始化的调用顺序
https://www.cnblogs.com/dirichlet/p/3266019.html?utm_source=itdadao&utm_medium=referral结论静态构造函数不能有访问修饰符,只能是static,且不能带有参数。实例化顺序先静态,后非静态。先成员后构造函数。实例化顺序在2的基础上受定义的顺序影响,示例case-1class A{ ...原创 2020-03-11 10:58:45 · 284 阅读 · 0 评论 -
[C#学习笔记] - abstract class与interface的区别
abstract抽象关键字,一般用于抽象类,抽象方法,抽象对象。为了等价比较,下文用于表示抽象类,即abstract class。interface接口关键字。一组协议或规则的声明,需要继承的对象具体实现。主要区别抽象类也是类,而接口是接口。抽象类单继承,接口多继承。抽象类中的成员(对象,方法等)需要实现。接口不可以实现。(C#8.0后好像运行)抽象类成员可以是public,pr...原创 2020-03-10 10:23:29 · 211 阅读 · 0 评论 -
[Asp.Net Core 3.1学习笔记] Razor视图实时刷新
修改Razor视图即时刷新的配置步骤1.版本.net core 3.1。2. 安装package,Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation。3. Startup的ConfigureServices里注册服务:services.AddMvc().AddRazorRuntimeCompilation();...原创 2019-12-11 15:06:51 · 2387 阅读 · 1 评论 -
[WPF学习笔记] - 嵌套属性的数据刷新方式探索
场景在WPF中,使用属性Binding到UI自动刷新是常用的手段。平时除了使用普通属性,如public string Value {get; set;},还会用到嵌套属性(不知道这个名称对不对),类似这样的形式public string Value => _m.Value;。这时候数据刷新就会碰到一定的问题。准备工作已知类NotifyPropertyChangedHelper,只需继承...原创 2019-12-05 17:34:15 · 514 阅读 · 0 评论 -
[WPF学习笔记] - 多个变量的Binding MultiBinding
MultiBindingWPF的变量Binding基本上都有了解,就是将变量与UI关联绑定,支持实时双向刷新。这里我以DataGrid为例子,介绍多变量的Binding,MultiBinding。<!-- 单个变量Binding --><DataGrid> <DataGrid.Columns> <DataGridTextColumn Head...原创 2019-12-02 23:17:24 · 1894 阅读 · 0 评论 -
[vs] - Asp.Net Core Web项目debug启动后闪退
场景使用Visual Studio 2019做个Asp.Net Core Web的小demo。不知道动了哪里的配置,导致项目启动失败。具体情况如下:在vs中使用InProcess与IIS方式。编译通过,能正常启动,但是启动成功后闪退,没有明确的错误代码。解决方案在VS里的Output窗口看日志。发现如下信息:Chrome error: Error: spawn C:\Program...原创 2019-09-03 17:36:59 · 2532 阅读 · 0 评论 -
[ASP.NET Core 3.0学习笔记] - SignalR
SignalR简介SignalR是一个.NET Core/.NET Framework的开源实时框架. SignalR的可使用Web Socket, Server Sent Events 和 Long Polling作为底层传输方式.SignalR基于这三种技术构建, 抽象于它们之上, 它让你更好的关注业务问题而不是底层传输技术问题.SignalR这个框架分服务器端和客户端, 服务器端支持A...原创 2019-11-11 11:39:17 · 930 阅读 · 0 评论 -
[C#学习笔记] - C#中闭包的一些理解
持续更新中…看过一些文章,总结下来就是,闭包是一个带共享数据的函数,嵌套定义函数,使用了外部定义域(非全局定义域)的变量。是否有返回值并不影响判断。示例:这三个函数几乎一样,唯一不同的就是action函数里变量。函数action => Console.WriteLine(x)关联的变量是x。这个匿名函数以该形式保存。直至被调用时,才会去取对应的i。private static v...原创 2019-10-24 16:21:53 · 231 阅读 · 0 评论 -
[C#学习笔记] - var与dynamic的区别和应用
区别var是编译器的语法糖,在编译期检查。dynamic是运行时解析。编译期不做任何检查。示例未知函数F,有返回值。dynamic格式的返回值可以任意操作,且能通过编译。但var只是语法糖,数据结构仍与F函数的返回值一致,无法做到任意操作。dynamic a = F();a.good = 10;var b = F();b.good = 10; // 该行编译检查报错dyn...原创 2019-07-04 14:16:01 · 226 阅读 · 2 评论 -
【C#】c++/cli封装的托管dll被C#工程调用出现未加载(could not load file or assembly)错误
场景c#项目需要调用c++编译的非托管dll。常见的方法是在c#中使用DllImport。但这种方式似乎性能上差一些,延迟毫秒量级。(个人粗略测试)响应上不如直接引用C++/CLI混合编程方式编译的托管dll。那么问题来了。经过C++/CLI成功编译生成了dll。在C#项目中也能正常调用,编译,执行。当我将项目部署在别的机器上时,就会报错,错误信息为”找不到xxx.dll“或者时”could ...原创 2019-05-21 16:23:29 · 2007 阅读 · 5 评论 -
[WPF学习笔记] - Binding
DataGrid cell background using bindingDatagrid单元格背景色绑定操作。public class MyColor{ Brush Background { get; set; } bool UseColor {get; get;} int Percentage { get; set; }}// XAML&lt;DataG...原创 2019-03-15 11:21:47 · 309 阅读 · 0 评论 -
【C++/CLI】托管转非托管时产生的char*及char**的内存释放
场景C++/CLI主要用于对c++编译的dll进行封装,方便.net调用。既然说到C++,难免dll中会有多处使用到指针,比较常见的就是外部传入一个List&lt;string&gt;,需要在CLI中转化成char**,然后才能调用对应的c++方法。作为中间变量,这些被我们临时生成的指针需要手动释放。简单场景代码如下:array&lt;String^&gt;^ list;//500个字符串i...原创 2019-02-19 17:49:03 · 2509 阅读 · 0 评论 -
[Newtonsoft.Json学习笔记] - 序列化与反序列化
关于Newtonsoft.Json的一些使用方法。json内容反序列化定义好数据结构,使用JsonConvert.DeserializeObject方法将json字符串中的内容,根据key将对应的value赋值到目标数据结构的字段中。(这里不区分大小写)。如:public User{ public int Id; public string Pwd;}json文件内容为:{...原创 2019-02-22 19:29:34 · 559 阅读 · 0 评论 -
【C#】在WPF的Datagrid中显示Enum类型的Description Attribute 信息
场景wpf开发。在一些datagrid表中,需要显示enum类型信息。但是enum类型的枚举种类一般都用英文命名,直接显示在ui上可能有些用户不太能理解是什么意思。所以需要在ui上展示其实际中文含义。解决方案在enum的每个枚举项前增加[Description(&quot;xxxx&quot;)]这样的Attribute限定。在代码中实现ValueConverter类。public class Enum...原创 2018-12-26 10:00:33 · 2484 阅读 · 0 评论 -
【C#】使用Dapper对SqlServer与Sqlite3进行双向同步。
场景Sqlserver主数据库部署于服务器,Sqlite3充当应用程序的缓存。Sqlserver与Sqlite3是一对多的关系。 常用操作为Sqlserver数据同步至Sqlite3。偶尔会出现反向同步。两个数据库表结构相同。因业务需求,对应的DTO结构多出一些字段。Sqlserver能很好的支持,在操作时自动忽略这些字段。而操作Sqlite3时,如insert操作,会提示DTO结构中某字段...原创 2018-12-13 14:12:28 · 1312 阅读 · 0 评论 -
[C#] - 使用SQLite 无法加载 DLL“SQLite.Interop.dll 找不到指定的模块
场景最近弄个新项目,需要用到ORM。基本就是VS2017+C#+Dapper+Sqlite这样的结构。从Nuget上下载相关的package,并关联好对应的数据结构。编译通过,但在运行时报错。如下图: 查看了下,packages目录下对应的System.Data.SQLite,System.Data.SQLite.Core文件内容都在,SQLite.Interop.dll也在。但就是没有...原创 2018-09-11 15:08:41 · 24543 阅读 · 2 评论