有名管道练习
/********************************************************************************
*
* 在主程序中创建一个子程序,并在父进程中获取系统时间,并写入管道,子程序从管道中读取数据
* author:jindouliu2024@163.com
* date:2025.5.8
* Copyright (c) 2024-2025 jindouliu2024@163.com All right Reserved
*
** ...
线程安全集合 --- Concurrent
引言
最近看一些代码的时候,发现有人用 System.Collections.Concurrent 下的 BlockingCollection 很便利的实现了生产者 - 消费者模式,这是之前没有注意到的,之前只关注过 ConcurrentQueue<T> 、ConcurrentStack<T> 或 ConcurrentBag<T>这些并发队列,并发堆栈,并发包相关的使用,正好好奇 BlockingCollection的用法,本 ...
Linux系列:如何用perf跟踪.NET程序的mmap泄露
一:背景
1. 讲故事
如何跟踪.NET程序的mmap泄露,这个问题困扰了我差不多一年的时间,即使在官方的github库中也找不到切实可行的方案,更多海外大佬只是推荐valgrind这款工具,但这款工具底层原理是利用模拟器,它的地址都是虚拟出来的,你无法对valgrind 监控的程序抓dump,并且valgrind显示的调用栈无法映射出.NET函数以 ...
C# 中 WebSocket 与 SignalR:实时通信的两种选择
在现代 Web 应用中,实时通信变得越来越重要。无论是聊天应用、在线游戏、股票行情推送还是协作编辑工具,都需要服务器能够主动向客户端推送数据。在 .NET 生态系统中,WebSocket 和 SignalR 是实现这一功能的两个主要方案。
本文将对这两种技术进行比较,分析它们的异同点和使用场景,并提供简单示例代码帮助你快速上手。
...
通过Themes/Generic.xaml为WPF控件提供默认样式不生效
1. 我有一个netframework4.8的类库项目,里面提供了一个自定义控件,然后我按照以下方法为控件提供了默认样式
a) 添加Themes\Generic.xaml文件,文件中提供自定义控件的默认样式
<Style TargetType="MyControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="M ...
一个功能丰富的 .NET 工具库 XiHan.Framework.Utils
概述
XiHan.Framework.Utils 是一个功能丰富的 .NET 工具库,涵盖了开发中常用的字符串处理、集合扩展、加密解密、分布式ID、文件IO、反射、缓存、线程、系统工具、国际化、网络、硬件信息、异常、数据过滤、Linq扩展等模块。 本库以高内聚、低耦合为设计理念,适用于各类 .NET 应用开发。
目录结构与模块说明
1. Verifica ...
WPF封装一个懒加载下拉列表控件(支持搜索)
因为项目中PC端前端针对基础数据选择时的下拉列表做了懒加载控件,PC端使用现成的组件,为保持两端的选择方式统一,WPF客户端上也需要使用懒加载的下拉选择。
WPF这种懒加载的控件未找到现成可用的组件,于是自己封装了一个懒加载和支持模糊过滤的下拉列表控件,控件使用了虚拟化加载,解决了大数据量时的渲染数据卡顿问题 ...
Bulkdelete 高效,稳定删除上亿条数据。
以下是一个基于 Entity Framework Extensions 的 BulkDelete 高效删除海量数据的方案,包含性能优化、稳定性保障和错误处理机制:
csharp
using System;
using System.Linq;
using Z.EntityFramework.Plus;
public class BulkDeleteService
{
private const int BatchSize = 50000; // 根据服务器内存和网络调整
private co ...
管道
进程间通信指的是进程之间的信息交换,进程间通信的方式有很多,比如管道通信、信号通信、共享内存、消息队列、信号量组、POSIX信号量等。
进程间通信可以达到数据传输、共享资源、控制进程等目的,方便用户对进程进行控制和管理。
管道通信
管道通信采用的是半双工的通信方式,其中管道在Linux系统下也是文件的一种,其中 ...
.net core 中的MemoryCache的详细使用
项目搭建了一个基础的框架,实现缓存的AOP拦截,首次查询从数据库获取,再写入缓存,设置过期时间,再次查询数据时从缓存获取。
话不多说我们来上代码实现:
1.定义缓存的接口和实现类
定义缓存接口ICachingProvider和实现类MemoryCaching:
/// <summary>
/// 简单的缓存接口,只有查询和添加,以后会进行扩展
/// </s ...
.net c# Func<Task>及变体做为多播委托异步执行会另开线程的问题
1. 问题
环境是dotnet8及以前的版本,dotnet9+不知道是否还有这个问题(我猜是一样的)。
如下代码,在多播委托await异步执行时,不会等待委托方法执行完成,它们在新的线程中运行。
async Task A()
{
}
async Task B()
{
}
Func<Task> func;//下面+=运算赋值为多播委托
func+=async()=>await A();
func+=async()=>await B( ...
推荐一款Excel读写神器之MiniExcel入门详解
在实际应用中,经常需要用到数据的导入与导出,而在这些导入导出功能中,最常用的就是Excel格式,它能非常方便的实现格式化数据呈现。目前主流框架大多需要将数据全载入到内存方便操作,但如果数据量过大,这可能会导致内存消耗问题,今天介绍的MiniExcel 尝试以 Stream 角度写底层算法逻辑,能让原本1000多MB占用降低到几M ...
.net项目防止盗链的几种实现方案
项目背景
甲方本地化上线了我们系统之后,进行安全漏洞扫描
发现了一个问题:
我们的附件路径 直接通过站点 访问的 ,在未授权的模式下,可以直接随意替换路径里的文件内容,通过浏览器拼接链接的方式打开系统里的一些附件和图片内容
因为系统内部 站点 呈现附件 也都是通过这个方式拼接呈现的。
快速调整方 ...
跨进程通信使用MQ,同进程跨多模块(类,或者说跨多业务边界)可使用Event事件驱动思路来解决
C#中委托、事件的好处,只需在某个类中提前定义好公开的委托或事件(委托的特殊表现形式)变量,然后在其它类中就可以很随意的订阅该委托或事件,当委托或事件被触发执行时,会自动通知所有的订阅者进行消费处理。(观察者模式用委托来实现是最好不过了,DDD所提倡的事件驱动其根本理念也是如此),当然我这里想到的是不需 ...
ASP.NET Core中使用请求过滤器记录Http API日志
一、过滤器简介
ASP.NET Core中的过滤器是一种组件,它可以在请求处理管道中的特定阶段运行代码。过滤器有多种类型,包括授权过滤器、资源过滤器、动作过滤器、异常过滤器和结果过滤器。本文中使用的是动作过滤器(Action Filter),它在动作方法执行前后执行,可以用来记录请求和响应信息。
二、自定义GlobalActionFilter ...
目录操作相关函数
mkdir函数
此函数用于创建一个目录
//头文件
#include <sys/stat.h>
#include <sys/types.h>
int mkdir(const char *pathname,mode_t mode);
//pathname:目录的路径
//mode:目录的权限
//ret:成功返回0,失败返回-1
rmdir函数
此函数用于删除一个目录
//头文件
#include <unistd.h>
int rmdir(const char *pathname);
/ ...
字符串相关函数(2)
将一个字符串转换成整型数,方便后序的处理
atoi函数
此函数可以将一个字符串转换成整型
//头文件
#include <stdlib.h>
//函数原型
int atoi(const char *nptr);
//nptr:待转换的字符串的地址
//ret:转换后的整型数
//注意:转换的字符串里边不能有其他字符
atol、atoll函数
long atol(const char *nptr);
long long ato ...
StarBlog和Masuit.MyBlogs博客程序学习使用日记(二)
使用中发现管理平台的博客列表无法查看,发现是echarts.min.js引用路径无效,找到route.config.js之后找到对应的菜单配置项修改对应的路径为https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js即可,后续考虑是不是修改为本地文件。
使用Masuit.MyBlogs时发现服务器带不动。。。。远程上去经常卡死。
将.net版本改回 ...
字符串处理函数
strstr函数
此函数用于从目标字符串中查找子串
char *strstr(const char *haystack, const char *needle);
//haystack:主字符串,即要搜索的字符串
//needle:子字符串,即要查找的字符串
//ret:如果找到子字符串,返回子字符串在主字符串中的起始位置的指针;如果没有找到子字符串,返回 NULL
strtok函数
用于字符串分割 ...
dotnet 9 通过 AppHostRelativeDotNet 指定自定义的运行时路径
在 2022 时,我写了一个提案,允许应用程序自定义使用的 dotnet 运行时文件夹路径。详细请看 https://github.com/dotnet/runtime/issues/64430
这个提案的背景是我有很多个应用准备发布给到用户端上,如果这么多应用都走独立发布,自然会让用户的 C 盘充满重复的文件。如果是将 dotnet 运行时交给的是 Program File 文件夹 ...