我可以延长会话或实例或控制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或任何其他最好的意见?谢谢…
问好…
您必须能够重现问题,然后使用断点/跟踪来找出错误所在。它不一定与会话超时有关,但如果用户没有使用应用程序超过15分钟,则可能与会话超时有关。
垃圾收集器不收集任何仍在作用域内的东西,所以这不是问题。
因此,请确保您可以重现问题,您可能会很快修复它(如果不能,请在这里报告您的发现!)
可以通过web.config
设置Session
超时时间:
<sessionState timeout="30"></sessionState>
,其中timeout
的单位为分钟。在这里了解有关配置sessionState
元素的更多信息。
这肯定不是垃圾收集器,因为它不会收集被引用的内存。
唯一确定原因是否为"session expired"的方法是:
- 查找错误所在
- 检测原因
在您的情况下,调试可能有点困难,因为用户最有可能在生产中遇到错误。所以你需要某种类型的记录系统。如果您喜欢传统的日志记录,那么您可以使用log4net。如果你想通过电子邮件通知异常等,你可以使用Elmah.
如果你没有为你的web应用程序设置超时时间,它将恢复到默认的20分钟。如果用户闲置屏幕的时间超过默认时间,会话将超时,您可能会遇到用户正在经历的错误(臭名昭著的黄屏死机)。
可以在web上扩展会话状态。
设置会话超时时间
@misha已经给出了一个例子。
我也会尝试@Roy的建议,并尝试在开发环境中重现错误。
可以是会话超时。我建议添加一些登录到全局。asaxsession_end事件查看它何时发生(如果有的话)。这可以帮助您解决这个错误。在许多地方进行日志记录通常有助于调试困难或间歇性问题。如果您想认真对待日志记录,请检查log4net(免费)库。很强大。