在网站中使用静态成员是否不好 ASP.NET 做法

本文关键字:ASP NET 做法 是否 静态成员 网站 | 更新日期: 2023-09-27 18:36:16

我知道静态成员将由 ASP.NET 网站的所有用户共享;但在这种特殊情况下 - 这正是我想要的。

这是我拼凑的一个私人使用网页,以促进两个用户之间基于网络的聊天。 我想避免将数据持久化到数据库或数据文件,并认为我可以将最后的 X 条消息存储在静态并发队列中。 这似乎在我的开发机器上工作得很好。

我对 ASP.NET 非常缺乏经验,但在我找到的所有示例中,都没有使用这种方法。 这是一种不好的做法吗,我应该注意"陷阱"吗? 我可以看到,另一种方法是使用数据库。 但我觉得这会付出更多的努力,而且我的猜测是更多的资源(我认为我的消息"缓冲区"将占用大约 40kb 的内存,并节省相当多的数据库旅行)。

在网站中使用静态成员是否不好 ASP.NET 做法

假设你确保整个事情都是线程安全的,这将起作用。

但是,IIS 可以随时回收您的 AppDomain,因此您的队列可能会在您不期望时被吹走。

即使 IIS 不会时不时地刷新和重新启动您的 AppDomain,为此目的使用静态变量对我来说听起来像是一个臭黑客。

HttpApplicationState类提供对可用于存储信息的应用程序范围缓存的访问。

ASP.NET 应用程序状态概述

只要您的要求不改变并且您可以随机丢失服务器端的所有消息,这就可以了。

我会稍微重构代码以提供"消息存储"接口以简化代码测试(如果您决定使其更复杂/持久化/多用户,将来可能会有好处)。

静态存储方法(或HttpApplicationState)的优点:

  • 消息的服务器端存储没有问题 - 更少的隐私问题。没有什么是永久存储的,所以你可以说任何你想说的话。
  • 极其简单的实现。
  • 非常适合即时消息/电话交谈。
  • 在单服务器情况下不太可能出现性能问题

缺点:

  • 消息可能会丢失。可以通过在客户端上存储历史记录来缓解(即在同一网页上使用 AJAX 查询检索消息)
  • 如果涉及更多用户时数据敏感/或应用程序与其他代码共享,则需要更加小心,因为静态数据对每个人都可见。与任何其他存储也没有太大区别。
  • 无法直接迁移到多个服务器/Web 园方案。对于 2 人聊天服务器来说真的不太可能出现问题。

当然,我过去看到的一个问题是将静态变量与Web Gardens一起使用。

请参阅此 SO 问题:网页花园和静态对象难以理解

请注意讨论中的一个关键点:

静态对象不在 Web 园/Web 场中共享。