【问题标题】:C# db application keeps crashing while cleaning tables(?)C# db 应用程序在清理表时不断崩溃(?)
【发布时间】:2009-07-21 10:50:06
【问题描述】:

我已将服务/应用程序连接到 mssql 服务器,它有时会因以下堆栈跟踪而严重崩溃:

Uncaught exception: ArgumentOutOfRangeException - Specified argument was out of the range of valid values.
Parameter name: capacity, thrown at: mscorlib
Stack Trace:
   at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument)
   at System.Collections.Generic.Dictionary`2..ctor(Int32 capacity, IEqualityComparer`1 comparer)
   at System.Data.ProviderBase.DbConnectionFactory.PruneConnectionPoolGroups(Object state)
   at System.Threading._TimerCallback.TimerCallback_Context(Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading._TimerCallback.PerformTimerCallback(Object state)

嗯,事实上,我不使用计时器,(而且我不确定计时器到底在哪里启动),我找不到这次崩溃的原因。 您是否有任何经验/您是否知道为什么会发生这种情况,以及如何避免它(或忽略它?)。服务的运行时间对我来说至关重要。

【问题讨论】:

  • 你能贴出你的连接字符串吗(很明显是经过消毒的)?

标签: c# database service crash


【解决方案1】:

您是否正确清理了数据库连接,即使用usingtry..finally

在您的应用程序运行时使用 perfmon.exe 查看性能计数器类别“.Net Data Provider for Sql Server”中的计数器,并检查您正在使用的连接数和池数。如果这种情况持续增长,则表明您正在泄漏连接,这可能会导致此错误。

【讨论】:

  • 不,我没有,我在整个服务期间都处于连接状态。
  • 您可能正在使用连接池,在这种情况下,您应该打开连接,执行您的工作,然后在完成后关闭它。
【解决方案2】:

该计时器可能是连接管理的内部部分。

您确定您实际上没有在其中一个 sp 上设置一个名为容量的参数吗?

如果是,你确定它永远不会溢出吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 2012-07-14
    相关资源
    最近更新 更多