共享的全局对象实例 - 它们应该在哪里 "live"?
Shared, global object instances - where should they "live"?
在您真正想要一个对象的单个实例并在所有请求中共享和持久化的情况下,存在哪些选项?
我目前的结论是我必须实现单例模式 - 因此静态访问此对象,使用一些小心的锁定,否则只需确保服务器 运行 只有一个工作进程。
我错过了什么吗? ASP.Net 对这种事情有什么特别的规定吗?
为了上下文;
我有一个应用程序,它将成为内存中存储的大量数据的前端(这是一个游戏;因此数据是许多正在进行的游戏的游戏状态)。游戏是短暂的,因此将它们保存在内存中似乎比在任何地方序列化数据更有意义,但我需要一些静态数据 "registry"。
您可以使用 Application
collection 从任何用户访问对象。但是,它不会简化您的情况。您不需要单例,但需要类似的代码来访问它,并且您仍然需要同步访问。
您可能还会考虑是否真的只想将所有内容都保留在内存中,考虑到如果应用程序被回收(默认情况下每天一次),所有当前游戏都会消失。您可能希望将状态持久保存在不太不稳定的地方,并且只在内存中保留一个副本以便快速访问。那么 Cache
class 会很有趣。
在您真正想要一个对象的单个实例并在所有请求中共享和持久化的情况下,存在哪些选项?
我目前的结论是我必须实现单例模式 - 因此静态访问此对象,使用一些小心的锁定,否则只需确保服务器 运行 只有一个工作进程。
我错过了什么吗? ASP.Net 对这种事情有什么特别的规定吗?
为了上下文; 我有一个应用程序,它将成为内存中存储的大量数据的前端(这是一个游戏;因此数据是许多正在进行的游戏的游戏状态)。游戏是短暂的,因此将它们保存在内存中似乎比在任何地方序列化数据更有意义,但我需要一些静态数据 "registry"。
您可以使用 Application
collection 从任何用户访问对象。但是,它不会简化您的情况。您不需要单例,但需要类似的代码来访问它,并且您仍然需要同步访问。
您可能还会考虑是否真的只想将所有内容都保留在内存中,考虑到如果应用程序被回收(默认情况下每天一次),所有当前游戏都会消失。您可能希望将状态持久保存在不太不稳定的地方,并且只在内存中保留一个副本以便快速访问。那么 Cache
class 会很有趣。