gpt4 book ai didi

asp.net - IIS Web Garden 中的单例对象

转载 作者:行者123 更新时间:2023-12-04 14:06:59 25 4
gpt4 key购买 nike

我在 asp.net 应用程序中有很多 Singleton 实现,并且出于某些性能原因想将我的应用程序移动到 IIS Web Garden 环境。

CMIIW,迁移到具有 n 个工作进程的 IIS Web Garden,每个工作进程中将创建一个单例对象,这使得它不再是单个对象,因为 n > 1。

我可以在 IIS Web Garden 中再次制作所有这些单例对象吗?

最佳答案

我不相信你可以(除非你能让那些 IIS 工作人员以某种方式使用共享内存中的对象)。

这是一个范围问题。您的单例实例使用进程空间作为其范围。正如您所说,您的实现现在跨越多个流程。 By definition ,在大多数操作系统上,单例将绑定(bind)到某个进程空间,因为它绑定(bind)到单个类实例或对象。

你有吗真的需要单例吗?在使用该模式之前,这是一个非常重要的问题。正如维基百科所说,有些人认为它是一种反模式(或代码异味等)。

可能有效的替代设计示例包括...

  • 您可以让多个对象针对中央存储或彼此同步。
  • 如果适用,请使用对象序列化。
  • 使用 Windows 服务和某种形式的 IPC,例如。 System.Runtime.Remoting.Channels.Ipc

  • 我喜欢大型网站的选项 3。伴随的 Windows 服务通常对大型网站非常有帮助。发送邮件、批处理作业等许多事情应该已经与前端处理工作进程分离。您可以将单例服务器对象推送到该进程中,并在 IIS 工作进程中使用客户端对象。

    如果您的单例类与共享状态或仅共享初始状态的多个对象一起使用,则选项 1 和 2 应该分别起作用。

    编辑

    从您的评论看来,分布式缓存形式的第一个选项应该适合您。

    那里有很多分布式缓存实现。
  • 微软AppFabric (以前称为 Velocity )是他们最近进入这个领域的举措。
  • Memcached ASP.Net Provider
  • NCache ( MSDN Article ) - OutProc 支持的自定义 ASP.Net 缓存提供程序。应该有其他自定义缓存提供程序。
  • 使用 Windows 服务和 IPC(选项 3)推出您自己的分布式缓存

  • PS。因为您专门研究聊天。我绝对推荐研究 Comet ( Comet implementation for ASP.NET?WebSync 等)

    关于asp.net - IIS Web Garden 中的单例对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2893202/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com