首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用c#进行odp.net海量复制

问使用c#进行odp.net海量复制
EN

Stack Overflow用户
提问于 2014-03-13 17:32:24
回答 1查看 1.8K关注 0票数 3

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

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

代码语言:javascript
复制
 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,原生整型) (20%)

有谁知道问题的原因吗?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-03-19 05:15:33

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22374283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档