Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用SqlTransaction处理数千个SQLCommand会导致内存异常_C#_Sql Server_Out Of Memory_Sqltransaction - Fatal编程技术网

C# 使用SqlTransaction处理数千个SQLCommand会导致内存异常

C# 使用SqlTransaction处理数千个SQLCommand会导致内存异常,c#,sql-server,out-of-memory,sqltransaction,C#,Sql Server,Out Of Memory,Sqltransaction,我在标准的C#windows窗体应用程序中编写了一个自定义复制函数,该应用程序带有SQL Server 2008 Express数据库。它基本上提取了一组需要针对订户数据库执行的sql语句。在完全刷新时,最多可以运行需要执行的200k+语句 我在代码块内处理这些语句,如下所示: using (SqlConnection connection = ConnectionManager.GetConnection()) { connection.Open(); SqlTransa

我在标准的C#windows窗体应用程序中编写了一个自定义复制函数,该应用程序带有SQL Server 2008 Express数据库。它基本上提取了一组需要针对订户数据库执行的sql语句。在完全刷新时,最多可以运行需要执行的200k+语句

我在代码块内处理这些语句,如下所示:

using (SqlConnection connection = ConnectionManager.GetConnection())
{
     connection.Open();

     SqlTransaction transaction = connection.BeginTransaction();

     // Process 200k+ Insert/Update/Delete statements using SqlCommands

     transaction.Commit
}
我发现,我的应用程序内存使用在最初的30k语句中保持了相当稳定的40mb左右。之后,它似乎突然跳到300mb左右,然后增长,直到我遇到OutOfMemory异常

我正在使用的方法可能吗?我能在一个事务中处理这么多语句吗?我想我应该能做到这一点。如果有更好的方法,我很乐意在这里。我需要这是事务性的,否则部分复制将导致数据库损坏

谢谢

编辑:


重新启动计算机后,我设法完成了一个完整的200k+复制。尽管在复制完成后,内存使用量曾一度增长到1.4Gb,但内存使用量一直下降到40mb。这让我得出结论,我的循环中处理命令的某些东西可能导致了内存的增长。

您是否在关闭前处理表单和一次性控件




我可以在一个事务中处理那么多语句吗

您有以下选项来执行此操作

  • 批量插入并操作
    存储过程中的记录
  • 准备
    XML
    并将字符串发送到
    数据库中
  • 通过存储过程发送Sql Server中的只读数据表
  • 样本存储过程 确保在不使用时处置
    对象


    应该是这样的

    using (SqlConnection connection = new SqlConnection())
    {
        connection.Open();
        using (SqlTransaction transaction = connection.BeginTransaction())
        {
            transaction.Commit();
        }
    }
    
    您是否也验证了
    SqlCommand

    using (SqlCommand cmd = new SqlCommand())
    {
    }
    

    您是否在关闭前处理您的表单和一次性控件




    我可以在一个事务中处理那么多语句吗

    您有以下选项来执行此操作

  • 批量插入并操作
    存储过程中的记录
  • 准备
    XML
    并将字符串发送到
    数据库中
  • 通过存储过程发送Sql Server中的只读数据表
  • 样本存储过程 确保在不使用时处置
    对象


    应该是这样的

    using (SqlConnection connection = new SqlConnection())
    {
        connection.Open();
        using (SqlTransaction transaction = connection.BeginTransaction())
        {
            transaction.Commit();
        }
    }
    
    您是否也验证了
    SqlCommand

    using (SqlCommand cmd = new SqlCommand())
    {
    }
    

    当您使用
    TransactionScope
    时,是否使用相同的行为?您是否也总是使用
    ùsing语句处理
    SqlCommand
    (这样做)?如果您按照中的步骤进行操作,您会发现哪种类型主导了托管堆?还没有尝试TransactionScope,将试一试。是的,我的所有语句都在使用块的内部。当您使用
    TransactionScope
    时,是否使用相同的行为?您是否也总是使用
    ùsing语句处理
    SqlCommand
    (这样做)?如果您按照中的步骤进行操作,您会发现哪种类型主导了托管堆?还没有尝试TransactionScope,将试一试。是的,我所有的陈述都在使用块中。谢谢RGI,我已经确保我在使用块中得到了所有东西,但是我会看一些你的其他建议。谢谢RGI,我已经确保我在使用块中得到了所有东西,但是我会看一些你的其他建议。