惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tailwind CSS Blog
大猫的无限游戏
大猫的无限游戏
L
LINUX DO - 热门话题
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
雷峰网
雷峰网
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
V
V2EX
GbyAI
GbyAI
量子位
Microsoft Azure Blog
Microsoft Azure Blog
有赞技术团队
有赞技术团队
G
Google Developers Blog
云风的 BLOG
云风的 BLOG
B
Blog
Microsoft Security Blog
Microsoft Security Blog
S
SegmentFault 最新的问题
O
OpenAI News
N
News and Events Feed by Topic
博客园 - Franky
爱范儿
爱范儿
Forbes - Security
Forbes - Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V2EX - 技术
V2EX - 技术
Application and Cybersecurity Blog
Application and Cybersecurity Blog
N
News and Events Feed by Topic
N
News | PayPal Newsroom
Schneier on Security
Schneier on Security
Cloudbric
Cloudbric
Security Archives - TechRepublic
Security Archives - TechRepublic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Recent Commits to openclaw:main
Recent Commits to openclaw:main
人人都是产品经理
人人都是产品经理
P
Privacy International News Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog RSS Feed
阮一峰的网络日志
阮一峰的网络日志
D
DataBreaches.Net
Last Week in AI
Last Week in AI
罗磊的独立博客
Spread Privacy
Spread Privacy
Recent Announcements
Recent Announcements
The Cloudflare Blog
Google DeepMind News
Google DeepMind News
AWS News Blog
AWS News Blog
The Register - Security
The Register - Security
Y
Y Combinator Blog
J
Java Code Geeks
I
Intezer

.NET

.net framework 项目新样式 数据库迁移报错 - V2EX 知乎网友:“VS2026 还是跑在 .NET Framework 4.8 上,看来 .NET LTS 只有三年的问题还真把微软自己的脖子卡住了” - V2EX .Net 有没有类似若依这种后台框架? - V2EX 请教个 .NET Framework 4.0 升级以运行在 arm 上的问题 - V2EX 应届生刚入职,做的是 wms+mes+mes 二次开发,因为没学过.net+c#,现在接口代码全靠 ai 写怎么办 - V2EX [分享创造] 开源轻量级 WinForm 壁纸切换器 Wallpaper Switcher (C# / .NET 9) - V2EX csharp 这回真成了脚本语言: dotnet run app.cs - V2EX 小弟写了一个 ETLBox 写入数据到 ClickHouse 的组件, 需要用到的兄弟们可以看看 - V2EX C#.net9wpf 项目这份.gitignore 规则可行吗?还有什么可以添加的吗? - V2EX 有人试过从 WCF 迁移到 ASP.NET Core Web API 吗? - V2EX 项目从.NET5.0 升级到 8.0,加起来 1.5 万行代码, Linux 下编译经常要半个小时,有的时候又几秒钟就能编译完, Windows 下一直非常正常,怎么排查? - V2EX 分享一个使用 C#封装的 gRPC 组件 - V2EX C# .NET 现在相对成熟的跨平台 UI 框架是否还是只有 Avalonia? MAUI 怎么样了 - V2EX ASP .NET Core + EF Core + MySQL 这个统计查询在 3 亿条记录的表下每次查询都需要 2~4 分钟,优化的办法只有用触发器或是后台每小时定期统计吗? - V2EX Avalonia UI 更新到 11 以后启动慢有办法优化吗? - V2EX EF Core 这类较重的 ORM 框架适合塞进客户端吗?如果是用于本地 SQLite 数据库,有没有更好的选择? - V2EX Windows 普通用户,可否禁用系统自带.net 3.5/4.8,仅安装最新.net 8/9? - V2EX Avalonia 11 后要从 ItemsControl 调用母 UserControl 的命令这种常见操作就必须每次都写这么长一坨东西吗? - V2EX .NET build 到 wasm 后怎么看错误代码在哪个 .cs 文件的哪个位置? DevTools 和那个 Debug URL 里都只能看到 e.Message - V2EX macOS 单用户环境 dotnet 装在 ~/.dotnet/ 还是 /usr/local/share/dotnet/ 更好? Rider 默认是前者,官网下载的 .pkg 默认是后者 - V2EX efcore 中, 使用 FromSql 查询时, 如何设置 where in 参数? - V2EX 有没有 .NET 大神帮忙看看困扰了好几个大神一年的内存泄露问题,优化了一年越变越严重,现在一小时崩一次 - V2EX 有用过 SQLSugar 的吗?能说说体验吗? - V2EX .NET 大牛们,这次遇到了一个涉及知识盲区的 BUG,与 Redis 有关 - V2EX 求助大佬们,干了件蠢事,我都不理解我为什么要用 Rider 去装 SDK,导致现在删不掉也找不到了 - V2EX nuget 服务器有问题了,不会也是那个 CrowdStrike 出问题导致的吧 - V2EX 为什么我已经在 Visual Studio 中安装了.Net 8.0,但是命令行显示的版本仍然是 6.0.31? - V2EX 我使用 vscode,如何平稳的将.Net7.0 升级到.Net8.0? - V2EX 我想重构我这个项目的前端,有什么好的建议? - V2EX 接了个小活,选 Windows 窗体应用还是 WPF 应用? - V2EX AlipaySDKNet.OpenAPI 这个包没多少代码,为什么大小是 14.1MB?里面塞了什么? - V2EX EF Core 不引入锁,高并发场景 ExecuteSqlRawAsync("UPDATE Users SET Balance = Balance + {0} WHERE UserId = {1}");后如何获取 Updated 后的值? - V2EX ASP .NET Core 5 内存占用线性增加, 1 小时内 100%把 128G 内存用完,如果运行 dotnet-gcdump 则能立即恢复正常水平,查了很多文档 gcdump 都是不会去触发 GC 的,但多次尝试都成功,求排查思路 - V2EX 为什么很多文章/工具都是针对.NET Core >3.1 而不是 3.0 的?这个个小版本改动非常大吗? - V2EX ASP.NET Core 在 Linux 下部分接口耗时长、并发性能差,除了逐步打印日志,还有什么方便、直观的办法查出是哪一步耗时长吗? - V2EX 时隔半年,我又来吐槽 nuget 了 - V2EX visual studio code for .NET - V2EX .NET 程序员的迷茫 - V2EX vs2022 win10 关机后再开机如何恢复 - V2EX Avalonia 现在还是灵车吗?连官网文档都能出这么多 bug - V2EX MAUI 在 macOS 上有办法实现关闭窗口后不退出吗? - V2EX ClosedXML 有办法简单实现把 HTML 保留所有颜色和图片插入到一个单元格吗? 我想到的办法是用 AngleSharp 解析,但改了好几个版本效果还是很差 - V2EX 求助(附日志)ASP.NET Core 部署在 Ubuntu 22.04 8 核 32G 阿里云下每月固定出现一次服务器失联情况,具体时间随机,失联后系统盘 IO 爆表,重启可解决,应该从哪里开始排查?完全没思路,附日志 - V2EX 求助 C#有办法在自己程序内部实现一个跨线程的简易消息队列吗?现在这种轮询数据库的实现 CPU 占用率很高, 4C8G 阿 里 云占用一直在 100% - V2EX 请教一下 asp.net core 技术问题 - V2EX .NET 8 发布正式版了 - V2EX .net 的库作者是不是都在向 js 看齐? - V2EX .net 刚通电没有触发怎么用软件主动获取红外传感器的信号。 - V2EX 看来 Windows Forms 依然活的好好的 - V2EX
同一程序内的消息队列,这样用单例的简易实现比 redis 的 Pub-Sub 效率高吗?如果不实现 Unsubscribe,有内存泄漏风险吗? - V2EX
drymonfidelia · 2024-11-22 · via .NET

进程内队列? 为啥不用 Channel

https://learn.microsoft.com/zh-cn/dotnet/api/system.threading.channels.channel?view=net-8.0

另外,如果是事件总线,可以考虑引入泛型之类的花样类型匹配订阅筛选器

这是自用的事件总线实现,目前大规模用在工作生产环境和玩具项目,未发现明显性能瓶颈

IEventBus.cs

```
public interface IEventBus
{
bool Subscript<T>(Action<T> callBack);

bool UnSubscript<T>(Action<T> callBack);

bool Publish<T>();

bool Publish<T>(T obj);
}
```

AnyPublishEvent.cs

```
/// <summary>
/// 任何事件发布,用于统计或通配
/// </summary>
[DisplayName("*")]
public record AnyPublishEvent(Type Type, object? Obj);
```

InProcessEventBusBase.cs

```
public abstract class InProcessEventBusBase(ILogger<InProcessEventBusBase> logger) : IEventBus
{
private readonly Dictionary<Type, HashSet<Delegate>> _dicTypeToHandlers = [];

public bool Subscript<T>(Action<T> callBack)
{
var type = typeof(T);
lock (_dicTypeToHandlers)
{
if (!_dicTypeToHandlers.TryGetValue(type, out var handlers))
{
handlers = _dicTypeToHandlers[type] = [];
}

return handlers.Add(callBack); // 忽略重复
}
}

public bool UnSubscript<T>(Action<T> callBack)
{
lock (_dicTypeToHandlers)
{
if (_dicTypeToHandlers.TryGetValue(typeof(T), out var handlers))
{
var unSubscript = handlers.Remove(callBack);

if (handlers.Count == 0) _dicTypeToHandlers.Remove(typeof(T));

return unSubscript;
}

return false;
}
}

public bool Publish<T>()
{
PublishInternal(new AnyPublishEvent(typeof(T), default));
return PublishInternal<T?>(default);
}

public bool Publish<T>(T obj)
{
PublishInternal(new AnyPublishEvent(typeof(T), obj));
return PublishInternal(obj);
}

private bool PublishInternal<T>(T eventValue)
{
var type = typeof(T);

Delegate[] subscripts;
lock (_dicTypeToHandlers)
{
if (!_dicTypeToHandlers.TryGetValue(type, out var handlers)) return false;
subscripts = [.. handlers];
}

foreach (var del in subscripts)
{
try
{
((Action<T>)del)(eventValue);
}
catch (Exception e)
{
logger.LogError(e, nameof(Publish));
}
}

return true;
}
}
```