据我所知,ASP.NET网站的所有用户都会共享一个静态成员;但在这种特殊情况下 - 这正是我想要的。
这是一个私人使用的网页,我把它放在一起,以促进两个用户之间的基于网络的聊天。我想避免将数据持久化到数据库或数据文件,并且我认为我可以将最后的X消息存储在静态并发队列中。这似乎在我的开发机器上运行良好。
我对ASP.NET很缺乏经验,但在我发现的所有例子中,都没有使用这种方法。这是一个不好的做法,我应该注意到“陷阱”吗?我可以看到的替代方案是使用数据库。但我觉得这将是更多的努力,我的猜测,是更多的资源(我认为我的'缓冲区'的消息将需要大约40kb的内存,并节省了相当多的数据库之旅)。
答案 0 :(得分:8)
假设你确保整个事情都是线程安全的,那就行了。
但是,IIS可以随时回收您的AppDomain,因此当您不期望它时,您的队列可能会被吹走。
答案 1 :(得分:3)
即使IIS不会偶尔刷新并重新启动AppDomain,为此目的使用静态变量听起来像是一个臭臭的黑客。
HttpApplicationState
类提供对可用于存储信息的应用程序范围缓存的访问。
答案 2 :(得分:2)
只要您的要求不变,您可以随意丢失服务器端的所有消息,这是完全正常的。
我会稍微重构一下代码,以提供“消息存储”界面,以简化代码的测试(如果你决定让它变得更复杂/持久/多用户,将来会有潜在好处。)
静态存储方法(或HttpApplicationState)的专业版:
缺点:
答案 3 :(得分:1)
当然,我在过去看到的一个问题是使用Web Gardens
的静态变量。
看到这个问题: Web Garden and Static Objects difficult to understand
请注意讨论的重点:
静态对象不会在网络花园/网络农场中共享。