C#对象池模式实现
有没有人有足够的资源来执行共享对象池策略,以实现有限的SQL连接池资源?(即将完全实现它是线程安全的)。 为了进一步澄清@Aaronaught请求,池使用将用于平衡对外部服务的请求。相比于我的直接观点,将其置于一种可能更容易立即理解的场景中。我有一个会话对象,其功能ISession与NHibernate中的对象类似。每个唯一的会话都管理着它与数据库的连接。当前,我有1个长时间运行的会话对象,并且遇到服务提供商正在限制我对单个会话的使用率的问题。 由于他们不希望将单个会话视为长期运行的服务帐户,因此他们显然将其视为重锤其服务的客户。这使我想到这里的问题,而不是创建一个单独的会话,而不是创建一个不同会话的池,并将请求拆分到多个会话中的服务上,而不是像我以前那样创建一个联络点。 希望背景可以提供一些价值,但可以直接回答您的一些问题: 问:创建对象是否昂贵? 答:没有对象是有限的资源池 问:它们会经常被获取/发布吗? 答:是的,他们可以再次想到NHibernate ISessions,通常在每个单页请求期间获取并释放1。 问:简单的先到先得就足够了吗?还是您需要更智能的东西,即可以防止饥饿? 答:一个简单的循环类型分配就足够了,由于饥饿,我假设您的意思是,如果没有可用的会话,则呼叫者会被阻止等待释放。这实际上并不适用,因为会话可以由不同的呼叫者共享。我的目标是在多个会话中分配使用情况,而不是在单个会话中进行分配。 我认为这可能与对象池的正常使用有所不同,这就是为什么我最初将这一部分省略并计划只是为了适应模式以允许对象共享而不是让饥饿情况发生的原因。 问:优先级,延迟加载与急切加载等事情如何? 答:不涉及优先级,为简单起见,仅假设我将在创建池本身时创建可用对象池。