记一次 .NET 某工控电池检测系统 卡死分析
2024/5/27 11:34:35

一:背景 1. 讲故事 前几天有位朋友找到我,说他的窗体程序有卡死现象,让我帮忙看下怎么回事,解决这种问题就需要在卡死的时候抓一个dump下来,拿到dump之后就可以分析了。 二:为什么会卡死 1. 观察主线程 窗体程序的卡死,需要观察主线程此时正在做什么,可以用 !clrstack 命令观察。0:000:x86 !clrstack OS Thread Id: 0x4a08 (0) Child SP IP Call Site 012fe784 0000002b [HelperMethodFra

【算法】友谊与雪花的舞动,脚本解析器原理
2024/5/27 11:34:34

在11月的下雪天,小悦身处于温暖的办公室中,窗外的雪花在灯光下翩翩起舞。她盯着电脑屏幕,不经意间,一个熟悉的身影从办公室门口处经过,吸引了她的目光。那个人看上去很像是一个女孩,名叫苏菲,是她在大学时期遇到的国外交换生。 小悦的心跳加速,她有些不敢相信自己的眼睛。在她的记忆中,苏菲是一个温柔、聪明且乐于助人的女孩。她们曾经一起上过计算机科学课,苏菲对数学和编程的热爱给小悦留下了深刻的印象。在课程中,苏菲表现出了非凡的编程天赋和扎实的技术功底,她的编程能力让小悦敬佩不已。 小悦忍不住站起来,快步走向那个人。她

基于C# Socket实现的简单的Redis客户端
2024/5/27 11:34:34

前言 Redis是一款强大的高性能键值存储数据库,也是目前NOSQL中最流行比较流行的一款数据库,它在广泛的应用场景中扮演着至关重要的角色,包括但不限于缓存、消息队列、会话存储等。在本文中,我们将介绍如何基于C# Socket来实现一个简单的Redis客户端类RedisClient,来演示构建请求和输出的相关通信机制。需要注意的是本文只是着重展示如何基于原生的Socket方式与Redis Server进行通信,并不是构建一个强大的Redis开发工具包。 Redis简介 Redis(Remo

Sql Server中Cross Apply关键字的使用
2024/5/27 11:34:33

Sql Server中Cross Apply关键字的使用 前言 在写一个业务的时候,有1列数据如下:车牌号湘A00001湘G00001湘A00002湘G00002湘A00003湘G00003湘A8888888湘A00004湘G00004湘A00001我的查询条件也是车牌号,我会传入如下参数: @PLATE_NO '湘A00003湘G00003湘A8888888'我需要判断我传入的车牌号是否包含上面的列数据,举例上面的表为B表,那么B表列中的车牌号,我的PLATE_NO参数需要包含里面所有的车牌号。 一个简

C# 当前项目自动服务DI类
2024/5/27 11:34:33

思路 我发现 . Ce WebAPi项目有一个与Springboot的不同之处,就是Springboot项目有自动装配机制,他可以将在src下面与启动类在同一级包目录下的类进行扫描注册 而之前我了解到Springboot的自动装配机制本质上也就是通过扫描对应包,然后进行通过它自身进行服务注册,我虽然写不出那么牛掰的东西,但是我也打算大致仿照一下 步骤如下:准备几个装饰类Server、Config等 扫描当前程序集以及引用程序集被改装饰(注解)描述了的类和接口 这里要注意注册的顺序,注册的顺序如果出错,就会

Performance Improvements in .NET 8 -- Native AOT & VM & GC & Mono【翻译】
2024/5/27 11:34:32

原生 AOT 原生 AOT 在 . 7 中发布。它使 . 程序在构建时被编译成一个完全由原生代码组成的自包含可执行文件或库:在执行时不需要 JIT 来编译任何东西,实际上,编译的程序中没有包含 JIT。结果是一个可以有非常小的磁盘占用,小的内存占用,和非常快的启动时间的应用程序。在 . 7 中,主要支持的工作负载是控制台应用程序。现在在 . 8 中,已经投入了大量的工作来使 ASP. 应用程序在使用原生 AOT 编译时表现出色,同时也降低了总体成本,无论应用模型如何。 在 . 8 中,一个重要的焦点是减小

【.NET】多线程:自动重置事件与手动重置事件的区别
2024/5/27 11:34:32

在多线程编程中,如果每个线程的运行不是完全独立的。那么,一个线程执行到某个时刻需要知道其他线程发生了什么。嗯,这就是所谓线程同步。同步事件对象(XXXEvent)有两种行为: 1、等待。线程在此时会暂停运行,等待其他线程发出信号才继续(等你约); 2、发出信号。当前线程发出信号,其他正在等待线程收到信号后继续运行(我约你)。 从前,小明、小伟、小更、小红、小黄计划到野外去烤鱼吃。但他们只确定市郊东南方向的一片区域,并不能保证具体哪个地点适合烧烤。于是,他们商量好,大家同时从家里出发。小明离那里比较近,他先

Net 高级调试之七:线程操作相关命令介绍
2024/5/27 11:34:31

一、简介    今天是《 高级调试》的第七篇文章。上一篇文章我们说了值类型,引用类型,数组等的内存表现形式。有了这个基础,我们可以更好的了解我们的程序在运行时的状态,内存里有什么东西,它们的结构组成是什么样子的,对我们调试程序是更有帮助的。今天,我们要说一些和线程有关的话题,虽然和线程相关,但是不是多线程的知识,不是线程安全的知识。今天我们讨论的是如何查看线程,它的表现形式,以及线程的调用栈,调用栈,又分为托管线程的调用栈和非托管线程的调用栈,这些也是我们高级调试必须掌握的。有了这些基础,我们就知道了程序

C# DAO转换为DTO工具类
2024/5/27 11:34:31

思想 DAO(Data Access Object)数据访问对象,是我们在做结构化数据库访问的时候传输的对象,通过这个对象我们可以与数据库中的表建立映射关系 DTO(Data Transfer Object)是我们在与前端进行数据交换时传递的对象为什么需要设置这这两种对象呢?为了数据安全 如果我们直接传递DAO的数据,我们可能回把数据库的底库都扒光,比如一个用户的数据,包括用户的Id、用户的账号、密码等,我们直接传递到前端,用户的密码有可能被抓包软件给获取到,之后用户账号就可能回被盗用,而为了杜绝这种情况

Office文档转pdf格式(三)
2024/5/27 11:34:30

上面两篇介绍的Office文档转pdf格式的方式都只能在Windows系统下使用,存在一定的局限性,本文介绍一个在Windows和Linux下都可以使用的,而且是开源且免费的软件:LibreOffice,下载地址为:https:www.libreoffice.gdownloaddownloadlibreoffice,使用这个软件,可以通过命令或者代码的方式来实现将Office文档转为pdf格式。具体方法如下: 1. 前提条件 安装LibreOffice软件,选择Windows(64位),点击下载,

Taurus .Net Core 微服务开源框架:Admin 插件【4-4】
2024/5/27 11:34:30

前言: 继上篇:Taurus . Ce 微服务开源框架:Admin 插件【43】 配置管理 Mvc【PluginMicroService 微服务】 本篇继续介绍下一个内容: 系统配置节点:Mvc Plugin CS 跨域界面: 界面如下:跨域功能相关配置说明如下: 1、CS.IsEnable:是否启用跨域功能。 仅需要开启该功能,即可开启跨域功能。 如果需要更精细化的配置,看下面的配置。 2、CS.Methods:控制允许跨域请求的方法 可以根据情况增加或减少,一般保持默认值即可。 3、CS.ig

Welcome to YARP
2024/5/27 11:34:29

目录 Welcome to YARP 1.认识YARP并搭建反向代理服务 Welcome to YARP 2.配置功能2.1 配置文件(Configuration Files) 2.2 配置提供者(Configuration Providers) 2.3 配置过滤器(Configuration Filters)Welcome to YARP 3.负载均衡 Welcome to YARP 4.限流 Welcome to YARP 5.身份验证和授权 Welcome to YARP 6.压缩

Net 高级调试之六:对象检查之值类型、引用类型、数组和异常的转储
2024/5/27 11:34:28

一、简介     今天是《 高级调试》的第六篇文章。记得我刚接触 框架的时候,还是挺有信心的,对所谓的值类型和引用类型也能说出自己的见解,毕竟,自己一直在努力。当然这些见解都是书本上的,并没有做到眼见为实,所以总是有些东西说不清楚。今天,我们就好好的说说 C# 的类型,是从内存级别、从底层来说一下值类型、引用类型到底是什么,它们在内存中的形态,还有也说说数组的内存形态,如何内部布局的,以及我们如何查找由未捕捉的异常引起的程序崩溃。这些都是基础的,如果这些掌握不好,以后的高级调试的道路,也不好走。自从我过

[WPF]浅析资源引用(pack URI)
2024/5/27 11:34:27

WPF中我们引用资源时常常提到一个概念:pack URI,这是WPF标识和引用资源最常见的方式,但不是唯一的方式。本文将介绍WPF中引用资源的几种方式,并回顾一下pack URI标识引用在不同位置的资源文件的写法。 WPF中引用资源的几种方式 WPF中使用URI标识和加载位于各种位置的文件,包括当前程序集资源文件、其他程序集资源文件、本地磁盘文件、网络共享文件、web站点文件。 程序集资源文件 程序集资源文件是最常见的一种情况。这里程序集资源指的是资源文件属性的生成操作(Build Action)为Res

Asp.Net Core webapi+net6 使用资源筛选器(过滤器) 做缓存
2024/5/27 11:34:26

写一个特性类,用来做标记 [AttributeUsage(AttributeTargets.Method)] 只对方法有效 public class ResourceFilterAttribute : Attribute {}我这里使用了MemyCache来做缓存,也可以使用字典来做,但一定要加上static,否则字典每一次请求都会new一个实例,缓存的东西就丢了 private static Dictionarystringobject caCheDic=new Dictionarystring obj

聊一聊 tcp/ip 在.NET故障分析的重要性
2024/5/27 11:34:26

一:背景 1. 讲故事 这段时间分析了几个和网络故障有关的.程序之后,真的越来越体会到计算机基础课的重要,比如 计算机网络 课,如果没有对 tcpip协议 的深刻理解,解决这些问题真的很难,因为你只能在高层做黑盒测试,你无法看到 tcp 层面的握手和psh通讯。 这篇我们通过两个小例子来理解一下 tcp 协议在故障分析中的作用。 二:tcp协议的两个小例子 1. 程序突然大量超时 这个故事起源于一位朋友遇到的问题:起初程序跑的一直都是好好的,但会有偶发性突然无法访问,奇怪的是在故障时手工访问域名时又是正常

编写高性能C#代码 —— Span<T>
2024/5/27 11:34:25

Span 提供任意内存的连续区域的类型安全和内存安全表示形式。它是在堆栈而不是托管堆上分配的ref结构,是对任意内存块的抽象 。 1.关于Span在 Ce 2.1中首次引入提供对任意内存上的连续区域的读写视图利用索引迭代来修改范围内的内存 几乎无开销2.和内存的关系   Span 表示任意内存的连续区域。 SpanT实例通常用于保存数组的元素或数组的一部分。 但是,与数组不同, SpanT实例可以指向堆栈上托管的内存、本机内存或托管的内存。 3.性能测试Span通常用来处理数组,所以本次测试的场景是数组

自定义xunit测试用例的执行顺序
2024/5/27 11:34:20

有的时候我们会对程序进行单元测试 为了测试的效果以及后期的维护 我一般会将各个测试拆开 根据需要测试的类分到各个类型中 不过在实际操作的时候就出现了一些意想不到的问题 各个测试的执行是乱序的 按照我自己写测试的习惯 假如我需要测试新写的增删改查的功能 我会将增删改查分开测试 会按照 新增查询修改删除 这样的顺序编写 在我的预想中新增操作应当是最先执行的 但是在实际的运行过程中完全不是这样 随机的顺序对这样的测试会有巨大的影响 所以就需要控制测试的执行顺序 为测试用例排序 一般而言 我们会将增删改查全都放在

一篇适合躺收藏夹的 Nexus3 搭建 NuGet&Docker 私有库的安装使用总结
2024/5/27 11:34:20

前言Nexus 是支持 Nuget、Docker、Npm 等多种包的仓库管理器,可用做私有包的存储分发,缓存官方包。本篇将手把手教学使用 Nexus 搭建自己的 NuGe t& Docker 私有仓库。特点私有化仓库管理支持权限管理缓存依赖包支持插件机制和 REST API成熟稳定强大支持的仓库包管理使用情况成熟文档,使用四平八稳,部署完基本就不需要操心太多 功能强大,启动起来内存大概 1.4G+,目前团队使用4G内存的服务器部署,差不多是够用的 支持 docker 仓库,尝试一番终于搞定,后续会在 De

一个基于.NET7的开源DNS服务 DnsServer 的部署使用经验分享
2024/5/27 11:34:18

前言接上篇 dockerbind 的使用搭建了一个 dns 服务,本篇将介绍另外一款 DnsServer 的部署和使用,更专注,更轻量。特点基于 . 7 实现 ,支持 Windows、Linux、macOS 和 Raspberry Pi 开箱即用,使用简单,高性能 提供 Web 控制台,可视化管理,查看使用情况 提供了对网络的额外控制,允许阻止域名 支持 DNSoverTLS, DNSoverHTTPS, DNSoverQUIC DNSoverHTTPS 实现支持 HTTP1.1、HTTP2 和 HTT

深入理解WPF中的依赖注入和控制反转
2024/5/27 11:34:17

在WPF开发中,依赖注入(Dependency Injection)和控制反转(Inversion of Control)是程序解耦的关键,在当今软件工程中占有举足轻重的地位,两者之间有着密不可分的联系。今天就以一个简单的小例子,简述如何在WPF中实现依赖注入和控制反转,仅供学习分享使用,如有不足之处,还请指正。 什么是依赖注入和控制反转? 依赖注入又称为依赖项注入,那什么是依赖项呢?比如在一个类A中,实现某中功能,而此功能是另外一个类B实现的,那就说明A依赖B,B就是A的依赖项。或者是另一个对象A

EFCore 使用FluntApi配置 全局查询筛选器
2024/5/27 11:34:17

我们在类中通常会有一个属性为 IsDel来表示软删除或也称逻辑删除,这个属性会导致我们在进行查询操作时,每一次都要 .where(s=s.IsDel==false) 非常的麻烦。在使用efCe时可以通过配置查询筛选器来很好的解决这个问题。 public class SysUser {public long Id { get set }public bool IsDel { get set } = falsepublic DateTime CreateTime { get set } }我们SysUser类

C# 压缩PDF文件
2024/5/27 11:34:16

PDF 文件可以包含文本、图片及各种媒体元素,但如果文件太大则会影响传输效果同时也会占用过多磁盘空间。通过压缩PDF文件,能够有效减小文件大小,从而提高传输效率并节省存储空间。想要通过C#代码快速有效地压缩 PDF 文件,下面是实现思路: 在 C# 中压缩 PDF 1、在VS中使用 NuGet包管理器将 “spire.pdf” 安装到程序中,并导入所需的命名空间。(也可下载Spire.PDF后手动引入); 2、实例化 PdfCompress 类对象并加载需压缩的PDF文件; 3、通过 TextCompre

亲测可行,Android Studio 查看源码出现 Source for ‘Android API xxx Platform’ not found 的解决方法
2024/5/27 11:34:16

亲测可行,roid Studio 查看源码出现 Source f ‘roid API xxx Platfm’ not found 的解决方法 如标题中的问题,产生的原因就是 SDK 源码目录下找不到对应版本的源码文件。解决方案一般就是下载对应版本的源码文件即可。 这里主要是另一种情况,每次 Google 发布 roid 新的版本时,对应源码还没有提供下载(一般会在正式版发布以后的某个时段提供)。这时怎么办呢? 思路就是把旧版本的源码先用着。 这里以 roid API 34 为例。,将 roid 33 的源

ASP.NET Core+Vue3 实现SignalR通讯
2024/5/27 11:34:16

从ASP. Ce 3.0版本开始,SignalR的Hub已经集成到了ASP. Ce框架中。因此,在更高版本的ASP. Ce中,不再需要单独引用Microsoft.AspCe.SignalR包来使用Hub。 在项目创建一个类继承Hub 首先是写一个CreateConnection方法 ConnectionId是SignalR中标识的客户端连接的唯一标识符 将userId和ConnectionId关联起来,这样就可以实现指定给某一个或一些用户发送消息了。 SendMessageToUser方法用于向特定的用户

Dapper.Lite 扩展
2024/5/27 11:34:14

Dapper本身并不方便,需要搭配扩展。Dapper是和具体的数据库无关的,再封装的话,不同数据库代码就不一样了,Dapper.Lite以最小的代价支持最多的数据库,旨在简单易用、稳定可靠。 最近重构并精简了Dapper.Lite,以及不依赖Dapper的版本LiteSql。这两款M基本完工,自荐一下。 Dapper.Lite是一款Dapper扩展,单表查询和SQL拼接查询条件支持Lambda表达式,旨在为大家提供一款简单易用、稳定可靠的M,支持acle、MSSQL、MySQL、PostgreSQL、SQ

Net 高级调试之五:如何在托管函数上设置断点
2024/5/27 11:34:14

一、简介    今天是《 高级调试》的第五篇文章。今天这篇文章开始介绍如何在托管方法和非托管方法设置断点,我们要想调试程序,必须掌握调试的一些命令,动态调试的命令,我们在上一篇文章已经讲过了。光有命令也是不行的,要让这些调试命令有用,必须可以在方法上设置断点,然后,再使用调试命令,才能完成我们的调试任务。当然了,第一次看视频或者看书,是很迷糊的,不知道如何操作,还是那句老话,一遍不行,那就再来一遍,还不行,那就再来一遍,俗话说的好,书读千遍,其意自现,我这是第三遍。     如果在没有说明的情况下,所有代

【算法】十一月阳光下的阴影面积
2024/5/27 11:34:13

十一月的阳光透过窗户,照射在一位笑起来甜美、青春洋溢的女子的办公桌上。小悦,一个总是以高马尾造型亮相的软件工程师,展现出她的干练与活力。那乌黑亮丽的长发轻盈飘动,仿佛在诉说着她的独特魅力。她的眉眼如画,那双明亮的眼睛里闪烁着对知识的渴望和对技术挑战的热情。 这一天,她收到了一封来自医院的邮件,邮件中提到的扫描设备技术更新问题让她感到有些挑战。然而,对于技术挑战,小悦总是充满了好奇心和热情。她决定主动联系医院,表达自己愿意参与这个项目的意愿。幸运的是,医院方面很快回复了她的邮件,并安排了一次电话会议。 在电

MongoDB+SignalR+Hangfire+Vue2+百度地图实现GPS实时定位
2024/5/27 11:34:10

MongoDB+SignalR+Hangfire+Vue2+百度地图实现GPS实时定位 一、实现效果二、安装MongoDB 可以自行参考菜鸟链接:MongoDB 教程 | 菜鸟教程 (runoob.com) 1.下载mongodb数据库安装包: 网盘链接:https:pan.baidu.coms4rb1fOkc 2.进入\mongodbwin32x86_64windows5.0.9\bin路径下创建db文件夹3.启动服务 在bin目录下输入cmd+回车,输入命令:mongod dbpath+你自己的db文

Office文档转pdf格式(二)
2024/5/27 11:34:08

上一篇我们使用的是微软的Office组件将Wd、Excel、Powerpoint转为pdf格式,本文将使用WPS Office组件进行转换。步骤如下: ① 添加WPS组件相关引用 注:wpsapi.dll 对应的是Wd 文件API;etapi.dll 对应的是Excel 文件API;wppapi 对应的是PPT 文件API; ② 编写Office帮助类public class WPSOfficeHelper{ summary Wd转换为pdf文件,适合(.doc、.docx、.mh