【问题标题】:OleDbException System Resources ExceededOleDbException 系统资源超出
【发布时间】:2020-11-18 09:05:19
【问题描述】:

以下代码执行一个简单的插入命令。如果连续调用 2,000 次(插入 2,000 行),则会抛出带有 message = "System Resources Exceeded" 的 OleDbException。我还应该做些什么来释放资源吗?

using (OleDbConnection conn = new OleDbConnection(connectionString))
using (OleDbCommand cmd = new OleDbCommand(commandText, conn))
{
    conn.Open();
    cmd.ExecuteNonQuery();
}

【问题讨论】:

    标签: c# oledbexception


    【解决方案1】:

    系统资源超出错误不是来自托管代码,而是来自您杀死数据库(JET?)

    你打开的连接太多了,太快了……

    一些提示:

    • 不要为每个命令打开新连接,避免往返,并使用单个连接执行插入。
    • 确保数据库连接池正常工作。 (不确定这是否适用于 OLEDB 连接。)
    • 考虑使用更优化的方式插入数据。

    你试过了吗?

    using (OleDBConnection conn = new OleDBConnection(connstr))
    {
        while (IHaveData)
        {
            using (OldDBCommand cmd = new OldDBCommand())
            {
                cmd.Connection = conn;
                cmd.ExecuteScalar();
            }
        }
    }
    

    【讨论】:

    • 我遇到了类似的问题,将 using() 语句移到循环之外不仅消除了异常,而且大大提高了速度。谢谢。
    • 用于 OLE DB 的 .NET Framework 数据提供程序使用 OLE DB 会话池自动对连接进行池化。这可以通过设置OLE DB Services在连接字符串中禁用。
    【解决方案2】:

    我使用 Access 2007 数据库毫无例外地测试了这段代码(我的插入次数高达 13000 次)。

    但是,我注意到它非常慢,因为您每次都在创建连接。如果将“使用(连接)”放在循环之外,它会更快。

    【讨论】:

      【解决方案3】:

      除了上述(仅连接到数据库一次)之外,我还想确保您正在关闭并处理您的连接。由于 c# 中的大多数对象都是由内存管理的,因此连接和流并不总是具有这种奢侈,因此如果不处理这样的对象,则不能保证它们会被清理。这具有使该连接在您的程序生命周期内保持打开状态的附加效果。

      另外,如果可能的话,我会考虑使用事务。我不知道您使用此代码的目的是什么,但 OleDbTransactions 在插入和更新数据库中的许多行时很有用。

      【讨论】:

      • 正确处理对象是他using 声明的重点。
      【解决方案4】:

      我不确定具体细节,但我遇到了类似的问题。我们使用带有 IIS 的 Access 数据库来为我们的客户提供服务。我们没有很多客户端,但是在单个会话期间打开和关闭了很多连接。经过大约一周的工作,我们收到了同样的错误,并且所有连接尝试都失败了。为了纠正这个问题,我们所要做的就是重新启动工作进程。

      经过一番研究,我发现(当然)Access 在这种环境下表现不佳。资源没有得到正确释放,随着时间的推移,可执行文件将耗尽。为了解决这个问题,我们将迁移到 Oracle 数据库。如果这不能解决问题,我会及时通知您我的发现。

      【讨论】:

      • 你有资源支持吗?
      • 我不记得我的来源,已经很久了。但是在整个网络的许多地方,我发现许多 cmets 确实存在这个问题。抱歉,我没有更多信息。
      【解决方案5】:

      这可能是因为您没有处理创建的 Connection 和 Command 对象。始终在最后处置对象。

      OledbCommand.Dispose();
      

      【讨论】:

      • 从“使用”范围转义后,对象将被释放。这就是“使用”的工作原理
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      相关资源
      最近更新 更多