【发布时间】:2010-07-25 18:55:29
【问题描述】:
有一段时间我想知道在编写 Web(或 WCF)服务时将一些数据存储在单例中是否是个好主意。目标是在服务的不同调用中重用此信息。 我想知道这些单例的生命周期是多少,因为例如当应用程序池被回收时,单例就消失了。 下一个问题是单例的可用性。它真的在所有调用中都可用,独立于 IIS 启动的进程或线程吗?
你怎么看?
谢谢,罗科
【问题讨论】:
标签: wcf web-services singleton
有一段时间我想知道在编写 Web(或 WCF)服务时将一些数据存储在单例中是否是个好主意。目标是在服务的不同调用中重用此信息。 我想知道这些单例的生命周期是多少,因为例如当应用程序池被回收时,单例就消失了。 下一个问题是单例的可用性。它真的在所有调用中都可用,独立于 IIS 启动的进程或线程吗?
你怎么看?
谢谢,罗科
【问题讨论】:
标签: wcf web-services singleton
单例的生命周期等于或低于应用程序的生命周期(如果它是延迟加载的)。当应用程序池回收时,应用程序停止并且用于存储单例的内存被操作系统回收。
单例将在应用程序的所有线程中可用,但由于它存储在运行此应用程序的进程的内存空间中,因此对其他进程不可用。
要回答您的问题,在 WCF 中使用单例模式存储数据是否是一个好主意,这完全取决于您的方案、您想要存储的内容以及您希望它在哪里可用。 WCF 提供了许多扩展点,可以让您避免使用静态方法。
单例的一个缺点是它们很难进行单元测试,所以我通常会尽可能避免使用它们。
【讨论】: