[C#.NET 拾遗补漏]14:使用结构体实现共用体

在 C 和 C# 编程语言中,结构体(Struct)是值类型数据结构,它使得一个单一变量可以存储多种类型的相关数据。在 C 语言中还有一种和结构体非常类似的语法,叫共用体(Union),有时也被直译为联合或者联合体。而在 C# 中并没有共用体这样一个定义,本文将介绍如何使用 C# 实现 C 语言中的 ... »

.netcore 急速接入第三方登录,不看后悔

此次带来的这个小项目是 OAuth2 登录组件,看到 Java 平台 JustAuth 项目很方便的接入第三方平台登录,心里痒痒啊,搜了一大圈,发现我大 .netcore 能用的可说是少之又少,而且代码写得一塌糊涂,全在一个库里,代码风格也看不惯,所以下定决定,操起键盘,开干。 ... »

[日常填坑系列]CAP食用指南-版本引用问题

一、前言 最近,由于好久没升级底层框架,一直用着netcore2.2版本,导致有些包没能更新到最新的版本,例如:CAP。 然而,在最近升级到CAP:3.1.2版本的时候,发现有点小坑,只能退回到CAP:3.1.1版本了。 二、原因 为啥要将CAP版本从3.1.2退回到3.1.1呢? 根本原因:CAP ... »

WebApi 中请求的 JSON 数据字段作为 POST 参数传入

使用 POST 方式请求 JSON 数据到服务器 WebAPI 接口时需要将 JSON 格式封装成数据模型接收参数。即使参数较少,每个接口仍然需要单独创建模型接收。下面方法实现了将 JSON 参数中的字段作为接口参数接收。实现的并不完美,现在只支持 JSON 格式顶级结构字段作为参数使用,且未处理复 ... »

WPF DataGrid与ListView性能对比与场景选择

开门见山的说 性能对比: 在Demo中,DataGrid与ListView默认开启虚拟化(可以理解为动态渲染,类似懒加载只渲染屏幕可以看见的地方) DataGrid渲染10列50行随机字符280ms ListView渲染10列50行随机字符80ms 场景选择: ListView只生成需要展示的数据类 ... »

深入浅出Dotnet Core的项目结构变化

有时候,越是基础的东西,越是有人不明白。 前几天Review一个项目的代码,发现非常基础的内容,也会有人理解出错。 今天,就着这个点,写一下Dotnet Core的主要类型的项目结构,以及之间的转换和演化。 一、最基础的应用Console 控制台应用,是Dotnet Core乃至前边的Dotnet ... »

ASP.NET Core 上传文件到共享文件夹

参考资料:ASP.NET 上传文件到共享文件夹 创建共享文件夹参考资料:https://www.cnblogs.com/dansediao/p/5712657.html 一、配置上传文件相关参数并读取参数 1.配置appsettings.json { "FileUploadInfo": { "Upl ... »

C#处理医学图像(一):基于Hessian矩阵的血管肺纹理骨骼增强对比

在医院实际环境中,经常遇到有问题的患者,对于一些特殊的场景,比如骨折,肺结节,心脑血管问题 需要图像对比增强来更为清晰的显示病灶助于医生确诊,先看效果: 肺纹理增强: 肺结节增强: 血管对比增强: 骨骼对比增强: 根据参考资料: MATLAB版本: https://ww2.mathworks.cn/ ... »

EF Core CodeFirst数据库自动迁移

开发过程中都会遇到数据库数据结构更新的问题,怎么对数据库更新进行版本控制呢? 不同的项目对数据库版本更新控制的方式不同,常用的有第三方Evolve,开发人员将数据库更新脚本按照版本号的放在一起,然后执行命令进行数据库更新。在之前EF的博客中也有介绍到数据库迁移的内容,一般在本地开发时只需要执行Add ... »

C#实现 Server-sent Events

基于http协议交互的推送方法大概方法如下: 轮询(ajax),比较耗费服务器资源。COMET方式(COMET 技术并不是 HTML 5 ) websocket 双向数据推送,灵活,功能强大 Server-sent-event(简称SSE),单项数据推送(Server-sent Events 规范是 ... »

.net通过iTextSharp.pdf操作pdf文件实现查找关键字签字盖章

之前这个事情都CA公司去做的,现在给客户做demo,要模拟一下签字盖章了,我们的业务PDF文件是动态生成的所以没法通过坐标定位,只能通过关键字查找定位了。 之前在网上看了许多通多通过查询关键字,然后图片盖章的文章都不完整,说白了基本上没完成。我这边利用了网上查找关键字的方法。 我自己查看了相关Api ... »

函数式编程-记忆化缓存

记忆化,是一种为了提高应用程序性能的FP技术。程序加速是通过缓存函数的结果实现的,避免了重复计算带来的额外开销。 1、现在我们使用Dictionary作为缓存结构 1 public static Func<T, R> Memoize<T, R>(Func<T, R> func) 2 where T ... »

内存泄漏问题分析之非托管资源泄漏

在某次巡查生产环境监控数据的时候,发现某个程序的内存占用偏高(大于500M)。对于这个程序的作用需要简单交代一下,这个程序是用做通讯服务程序,通过Socket与IOT设备进行通讯。因为了解这个程序的使用场景,所以对于该程序的内存占用偏高产生了怀疑。该程序服务的设备并不多,但是占用了几百兆的内存,很明 ... »

使用swagger上传文件

经常使用swagger,可以通过设置[ProducesResponseType]标记接口的返回信息;swagger也能通过接口的参数列表,自动获得发送的数据结构信息。 不过有一个例外,就是上传文件的时候,设置了[Consumes]的内容为multi-part/form-data,但是swagger并 ... »

Redis在存取序列化和反序列化性能问题

1. 问题场景 我们在使用Redis的时候经常会将对象序列化存储到Redis中,在取出的时候进行反序列化,如果对象过大在进行序列化和反序列化的时候会有一定性能问题。今天查看了CSRedis源码发现在Set和Get的时候是支持Byte[]类型,那么问题来了如果我们将对象转换成Byte[]类型进行存储是 ... »

C#脚本引擎CS-Script

最近想要在程序中嵌入一个C#脚本引擎,在.NET Framework时代用过一个叫做CS-Script的东西,感觉还是不错,发现现在也支持.NET Core了,试着嵌入一下。 比较 要说能够运行C#脚本的解决方案,有Roslyn和Mono,与他们相比,CS-Script能够提供的封装更为高级,它底层 ... »