我在Asp.net开发了一个Web应用程序C#。它是一种内联网应用程序。有一些页面用于Crud过程。但在本地测试中,每件事情都可以。按F5:
1)GetList() - > OK
2)AddNew() - >好的
3)保存() - >好吧
但是多用户(真实世界)是这个错误:
对象引用未设置为对象的实例
但是当地的每件事都可以。用户说“是的,每件事都可以在2-3小时内完成,但在下午之后。我看到错误:对象引用没有设置为对象的实例”
我有2个场景
请考虑2场景;如何延长实例或会话的寿命或控制GC或任何其他最佳意见?感谢...
最诚挚的问候......
答案 0 :(得分:3)
您必须能够重现问题,然后使用断点/跟踪来确定错误的位置。它不一定与会话超时有关,但可能是,如果您的用户未使用该应用程序15分钟或更长时间。
垃圾收集器不会收集仍在范围内的任何内容,因此不会出现问题。
因此,请确保您可以重现问题,您可能会很快修复它(如果没有,请在此处报告您的发现!)
答案 1 :(得分:2)
您可以从Session
web.config
超时
<sessionState timeout="30"></sessionState>
其中timeout
以分钟为单位。详细了解如何配置sessionState
元素here。
答案 2 :(得分:0)
如果您没有为Web应用程序设置超时,它将回退到默认值20分钟。如果用户已将屏幕空闲超过默认时间,则会话将超时,您可能会收到用户遇到的错误(臭名昭着的黄色死亡屏幕)。
您可以在web.config中扩展会话状态,请参阅以下链接:
Setting the session timeout property
@misha举了一个如何做的例子。
我也会尝试@Roy建议的内容,并尝试在开发环境中重现错误。
答案 3 :(得分:0)
它绝对不是垃圾收集器,因为它不会收集被引用的内存。
唯一可以确定原因是“会话已过期”的方法是:
答案 4 :(得分:0)
可以是会话超时。我建议在Global.asax Session_End事件中添加一些日志记录以查看它何时发生(如果有的话)。这可以帮助您解决此错误。将记录放入许多地方通常有助于调试困难或间歇性问题。如果你想认真记录检查log4net(免费)库。相当强大。