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

时间:2011-12-15 15:33:39

标签: c# asp.net .net c#-4.0 web-config

我在Asp.net开发了一个Web应用程序C#。它是一种内联网应用程序。有一些页面用于Crud过程。但在本地测试中,每件事情都可以。按F5:
1)GetList() - > OK
2)AddNew() - >好的 3)保存() - >好吧

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

但是当地的每件事都可以。用户说“是的,每件事都可以在2-3小时内完成,但在下午之后。我看到错误:对象引用没有设置为对象的实例”

我有2个场景

  • 那个问题是GC.Gc可以配置我的实例来制作上面的方法!
  • 会话超时

请考虑2场景;如何延长实例或会话的寿命或控制GC或任何其他最佳意见?感谢...

最诚挚的问候......

5 个答案:

答案 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)

它绝对不是垃圾收集器,因为它不会收集被引用的内存。

唯一可以确定原因是“会话已过期”的方法是:

  1. 查找错误的位置
  2. 检测原因
  3. 在您的情况下,调试可能有点困难,因为用户遇到了最有可能出现错误的错误。所以你需要某种类型的日志系统。如果您喜欢经典日志记录,那么您可以使用log4net。如果您希望通过电子邮件通知异常等,可以使用Elmah

答案 4 :(得分:0)

可以是会话超时。我建议在Global.asax Session_End事件中添加一些日志记录以查看它何时发生(如果有的话)。这可以帮助您解决此错误。将记录放入许多地方通常有助于调试困难或间歇性问题。如果你想认真记录检查log4net(免费)库。相当强大。