刷新
记一次 .NET某工业视觉软件 崩溃分析

博主头像 一:背景 1. 讲故事 前两天给训练营里的一位学员分析了一个dump,学员因为弄了一整天也没找到祸根,被我一下子弄出来了,极度想看看我是怎么分析的?由于在微信上不能一言两语表尽,干脆写一篇文章出来详细的讲讲吧,哈哈,训练营里的学员得有求必应哈。。。话不多说,我们一起探索下这个程序的崩溃之路吧。 二: ...

DDD架构展示

博主头像 1 DDD分层架构 DDD 分层架构就是优化后的四层架构。 从上到下依次是:用户接口层、应用层、领域层和基础层。 1.1 DDD封层架构 用户接口层:负责向用户显示信息和解释用户指令。这里的用户可能是:用户、程序、自动化测试和批处理脚本等等。 应用层:很薄的一层,理论上不应该有业务规则或逻辑,主要面 ...

DDD领域设计的相关概念简述

博主头像 1 什么是DDD 领域驱动设计,即Domain Driven Design(DDD)。 DDD是一套完整而系统的设计理论与方法,使得你的设计思路能够更加清晰,设计过程更加规范。 DDD 善于处理与领域相关的拥有高复杂度业务的产品开发 总之,DDD是专门为解决复杂性而诞生一套完整的理论方法。 DDD落 ...

聊一聊 C#线程池 的线程动态注入 (下)

博主头像 一:背景 1. 讲故事 前面二篇我们聊到了 Thread.Sleep 和 Task.Result 场景下的线程注入逻辑,在线程饥饿的情况下注入速度都不是很理想,那怎么办呢?有没有更快的注入速度,这篇作为 动态注入 的终结篇,我个人总结如下两种方法,当然可能有更多的路子,知道的朋友可以在下面留言。 二 ...

C#中使用gRPC(一)

博主头像 在使用gRpc之前,需要先了解一点基础知识。 1. Protocol Buffers 具体参考https://protobuf.dev/ : 简答来说就是Google开发的一种数据描述的格式。和具体的开发语言无关,根据这个东西,你能定义你方法的参数,返回值类型。 首先 创建一个 xxx.proto ...

聊一聊 C#线程池 的线程动态注入 (中)

博主头像 一:背景 1. 讲故事 上一篇我们用 Thread.Sleep 的方式演示了线程池饥饿场景下的动态线程注入,可以观察到大概 1s 产生 1~2 个新线程,很显然这样的增长速度扛不住上游请求对线程池的DDOS攻击,导致线程池队列越来越大,但C#团队这么优秀,能优化的地方绝对会给大家尽可能的优化,比如这 ...

聊一聊 C#线程池 的线程动态注入 (上)

博主头像 一:背景 1. 讲故事 在线程饥饿的场景中,我们首先要了解的就是线程是如何动态注入的?其实现如今的ThreadPool内部的实现逻辑非常复杂,而且随着版本的迭代内部逻辑也在不断的变化,有时候也没必要详细的去了解,只需在稍微宏观的角度去理解一下即可,我准备用三篇来详细的聊一聊线程注入的流程走向来作为线 ...

聊一聊 C#前台线程 如何阻塞程序退出

博主头像 一:背景 1. 讲故事 这篇文章起源于我的 C#内功修炼训练营里的一位朋友提的问题:后台线程的内部是如何运转的 ? ,犹记得C# Via CLR这本书中 Jeffery 就聊到了他曾经给别人解决一个程序无法退出的bug,最后发现是有一个 Backgrond=false 的线程导致的。恰巧在我分析的3 ...

如何解决无法远程连接redis

博主头像 无法远程连接Redis的原因及解决方法 1.可能的原因 防火墙设置:防火墙可能会阻止远程连接Redis服务。 配置问题:可能是redis的配置文件中存在错误或者参数设置不当。 网络问题:可能是网络连接不稳定或者网络环境配置不正确。 2.解决方法 2.1 检查防火墙设置 linux系统可以使用以下命令 ...

用C#实现感知器算法——从零开始打造一个简单的机器学习模型!

博主头像 感知器(Perceptron)是一个经典的机器学习算法,常用于二分类问题。它是神经网络的基础,最早由Frank Rosenblatt在1958年提出。今天,我们将用C#实现一个简单的感知器算法,让你理解感知器的工作原理,并能够亲自编码一个可用的模型。 一、感知器算法概述 感知器是一种线性分类器,其核 ...

JLink SDK API 二次开发 C#版本库

博主头像 说明 参考: https://blog.csdn.net/weixin_47124634/article/details/136183404 内容来源于网络,结合UM8002更新了部分函数的签名,增加了一些注释 对于函数的使用定义,建议参考UM8002 主要头文件 using System; usi ...

C#调用c语言dll,并且传入byte数组或字符串,简单实例

博主头像 前言 在C#中调用dll,可能会出现程序一开始可以运行,但过一会儿后出现内存错误——尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 这是由于C#的托管内存机制,而C语言中是非托管内存。如果参数传入dll后,C#提前回收了内存或者移动了数据,将会出现错误。 解决方法是,在C#传入dll参数之前 ...

如何在C#.NET中使用LINX(arduino的LabView库)

博主头像 思路:使用LabView的导出为.NET互操作程序集,导出COM给.NET调用 在LabView安装HubMaker插件,将预编译固件刷入Arduino设备中。这不是本文的重点,省略 根据需要,编写VI。注意:必须在此处使用全局变量或者其它方法避免LinxResource簇在C#中出现,否则在程序运 ...

CompilerGenerated与GeneratedCode区别

博主头像 前言 最近在捣鼓代码生成器,基于 Roslyn,我们可以让生成器项目生成我们的目标 C# 代码,这个也是MVVM Toolkit的实现方式,在查看生成代码的过程中,我们经常会遇到一些特殊的特性,如 GeneratedCodeAttribute ,刚好我还遇到过 CompilerGeneratedAt ...

聊一聊坑人的 C# MySql.Data SDK

博主头像 一:背景 1. 讲故事 为什么说这东西比较坑人呢?是因为最近一个月接到了两个dump,都反应程序卡死无响应,最后分析下来是因为线程饥饿导致,那什么原因导致的线程饥饿呢?进一步分析发现罪魁祸首是 MySql.Data,这就让人无语了,并且反馈都是升级了MySql.Data驱动引发,接下来我们简单聊一下 ...

<1234···18>