我可以延长会话或实例或控制GC的生命周期吗?

本文关键字:生命 周期 GC 控制 会话 实例 我可以 | 更新日期: 2023-09-27 18:18:02

我在Asp.net中开发了一个c# web应用程序。它是一种内部网应用程序。有一些页面用于Crud进程。但是在本地测试中一切都很好。按F5:
1) GetList() -> OK
2) AddNew() -> Ok
3) Save() -> Ok

但是多用户(真实世界)同意这个错误:
对象引用未设置为对象的实例

但是在本地一切都很好。用户说:"是的,在2-3小时内一切都很好,但下午之后。我看到错误:对象引用未设置为对象的实例"

我有两个场景

  • 这个问题是GC。Gc可以处理我的实例使以上方法!
  • 会话超时

请考虑2种情况;如何延长实例或会话的生命周期或控制GC或任何其他最好的意见?谢谢…

问好…

我可以延长会话或实例或控制GC的生命周期吗?

您必须能够重现问题,然后使用断点/跟踪来找出错误所在。它不一定与会话超时有关,但如果用户没有使用应用程序超过15分钟,则可能与会话超时有关。

垃圾收集器不收集任何仍在作用域内的东西,所以这不是问题。

因此,请确保您可以重现问题,您可能会很快修复它(如果不能,请在这里报告您的发现!)

可以通过web.config设置Session超时时间:

<sessionState timeout="30"></sessionState>

,其中timeout的单位为分钟。在这里了解有关配置sessionState元素的更多信息。

这肯定不是垃圾收集器,因为它不会收集被引用的内存。

唯一确定原因是否为"session expired"的方法是:

  1. 查找错误所在
  2. 检测原因

在您的情况下,调试可能有点困难,因为用户最有可能在生产中遇到错误。所以你需要某种类型的记录系统。如果您喜欢传统的日志记录,那么您可以使用log4net。如果你想通过电子邮件通知异常等,你可以使用Elmah.

如果你没有为你的web应用程序设置超时时间,它将恢复到默认的20分钟。如果用户闲置屏幕的时间超过默认时间,会话将超时,您可能会遇到用户正在经历的错误(臭名昭著的黄屏死机)。

可以在web上扩展会话状态。

设置会话超时时间

@misha已经给出了一个例子。

我也会尝试@Roy的建议,并尝试在开发环境中重现错误。

可以是会话超时。我建议添加一些登录到全局。asaxsession_end事件查看它何时发生(如果有的话)。这可以帮助您解决这个错误。在许多地方进行日志记录通常有助于调试困难或间歇性问题。如果您想认真对待日志记录,请检查log4net(免费)库。很强大。