当前位置:  开发笔记 > 后端 > 正文

IIS Web Garden中的Singleton对象

如何解决《IISWebGarden中的Singleton对象》经验,为你挑选了1个好方法。

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

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

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



1> kervin..:

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

这是一个范围问题.您的单例实例使用进程空间作为其范围.就像你说的那样,你的实现现在跨越了多个进程. 根据定义,在大多数操作系统上,单例将绑定到某个进程空间,因为它与单个类实例或对象相关联.

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

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

    您可以让多个对象与中央存储或彼此同步.

    如果适用,请使用对象序列化.

    使用Windows服务和某种形式的IPC,例如.System.Runtime.Remoting.Channels.Ipc

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

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

编辑

从您的评论中,它听起来像分布式缓存形式的第一个选项应该适合您.

那里有很多分布式缓存实现.

    Microsoft AppFabric(以前称为Velocity)是他们最近进入这一领域的举动.

    Memcached ASP.Net提供商

    NCache(MSDN文章) - OutProc支持的自定义ASP.Net Cache提供程序.应该有其他自定义缓存提供程序.

    使用Windows服务和IPC推出自己的分布式缓存(选项3)

PS.因为你专门研究聊天.我肯定会推荐研究Comet(Comet实现ASP.NET?和WebSync等)

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有