V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
drymonfidelia
V2EX  ›  .NET

同一程序内的消息队列,这样用单例的简易实现比 redis 的 Pub-Sub 效率高吗?如果不实现 Unsubscribe,有内存泄漏风险吗?

  •  
  •   drymonfidelia · 4 天前 · 530 次点击
    using System;
    using System.Reactive.Linq;
    using System.Reactive.Subjects;
    
    public class BasicMessageBus
    {
        private static readonly BasicMessageBus _instance = new();
        public static BasicMessageBus Inst => _instance;
    
        private readonly Subject<object> _messages = new();
        public IObservable<T> Subscribe<T>() => _messages.OfType<T>();
        public void Send(object message) => _messages.OnNext(message);
    }
    
    1 条回复    2024-11-26 20:18:45 +08:00
    hez2010
        1
    hez2010  
       4 小时 42 分钟前
    没有看到哪里有内存泄露的风险。
    调用 Subscribe 的方法所在的对象如果被回收了那对 _messages 的引用也就自动没了,除非你是在哪个具有 static 生命周期的对象中调用了 Subscribe 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1614 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 17:01 · PVG 01:01 · LAX 09:01 · JFK 12:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.