繁体   English   中英

使用c#进行odp.net批量复制

[英]odp.net bulk copy with c#

我想使用odp.net的OracleBulkCopy类将数据从Microsoft Sql Server数据库复制到Oracle数据库。 我有一个大约2M行和100列的表。 我有内存分配问题。 下面的代码似乎是分配内存并且从不释放,直到它得到一个无法分配内存异常。

我使用了一个非常相似的代码,使用System.Data.SqlClient.SqlBulkCopy函数将数据从Oracle传输到MSSQL服务器,从来没有遇到过这种问题。

 using (SqlConnection sourceConnection =
               new SqlConnection(sourceConn))
        {

            sourceConnection.Open();
            SqlCommand commandSourceData = new SqlCommand(
              sourceSQL, sourceConnection);

            commandSourceData.CommandTimeout = 1000000;


            using (OracleConnection destinationConnection =
                       new OracleConnection(connStr))
            {
                destinationConnection.Open();
                using (OracleBulkCopy bulkCopy =
                           new OracleBulkCopy(destinationConnection))
                {

                    bulkCopy.DestinationTableName = destinationTable;  
                    bulkCopy.BatchSize = 10000;
                    bulkCopy.BulkCopyTimeout = 10000;
                    bulkCopy.WriteToServer(commandSourceData.ExecuteReader(CommandBehavior.SequentialAccess));

                }
            }
        }

当我检查内存分配时,这两个函数似乎正在使用大部分内存:

-System.Data.SqlClient.SqlDataReader.GetValue(int32)(70%) - Oracle.DataAccess.Types.DecimalConv.GetBytes(valuetype System.Decimal,native int)(20%)

有没有人知道问题的原因?

谢谢。

确保显式关闭()和Dispose()你的ODP.NET对象。 垃圾收集器不知道非托管代码所占用的内存。

问题未解决?试试以下方法:

使用c#进行odp.net批量复制

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM