如果我们使用会话方法存储全局变量,如果数据可能会变得很长一段时间,那么只是为了清除一些混淆需要建议是否合适吗?
答案 0 :(得分:0)
不,不是。将数据存储在db或某个缓存中,并在会话中仅保留一些Id。
通常,您应该非常小心在会话中存储的内容。这就是原因:
默认行为是将会话变量存储在ASP.NET辅助进程的内存空间中
https://msdn.microsoft.com/en-us/library/ms178581.aspx
将大会话数据存储在内存中可能会使您的生产服务器爬行,因为它很快就会耗尽物理内存。然后你会想知道内存泄漏在哪里并花费数小时寻找它。
我建议不要在生产或开发过程中使用InProc会话模式,除非你不关心内存。有一些好的会话状态提供程序可用,即Redis Session State Provider - 您需要做的就是安装nuget并在web.config
文件中对其进行配置。
如果您使用InProc以外的任何商店,则需要确保您在Session中输入的数据是可正确序列化的。如果不是 - 在开发期间发现比发布到生产服务器之后更好。因此,我建议使用相同的会话状态提供程序进行开发和生产。
答案 1 :(得分:0)
全局变量并不适合Session。会话是按用户而不是全局。除此之外,会话在20分钟后暂停,尽管可以通过配置进行控制。
我会使用应用程序缓存,这是全局的,每个人都可以访问。另外,如果需要,您可以控制何时重新加载数据。
现在,数据的大小也有影响。我不会在Cache中放入大量数据。
另一个选择是使用数据库,我会考虑使用NoSql数据库。通常,如果您缓存数据集,它不需要是关系数据,数据可以很容易地向前和向后序列化,因此NoSql数据库可能会使这个快速而便宜