小编mha*_*125的帖子

DataTable不释放内存

我有一个数据加载过程,将大量数据加载到DataTable然后执行一些数据处理,但每次作业完成DataLoader.exe(32位,具有1.5G内存限制)时不会释放所有正在使用的内存.

我尝试了三种释放内存的方法:

  1. DataTable.Clear()然后调用DataTable.Dispose()(释放大约800 MB内存,但每次数据加载作业完成后仍会增加200 MB内存,在数据加载3或4次后,内存异常因为超过1.5 G而抛出异常记忆总计)
  2. 将DataTable设置为null(没有释放内存,如果选择加载更多数据,则抛出内存不足异常)
  3. 直接调用DataTable.Dispose()(没有释放内存,如果选择加载更多数据,则抛出内存不足异常)

以下是我尝试进行测试的代码(在实际程序中,它不是递归调用的,它是由一些目录监视逻辑触发的.这段代码仅用于测试.很抱歉混淆.):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace DataTable_Memory_test
{
class Program
{
    static void Main(string[] args)
    {
        try
        {
            LoadData();                
            Console.ReadKey();

        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
            Console.ReadKey();
        }
    }

    private static void LoadData()
    {
        DataTable table = new DataTable();
        table.Columns.Add("Dosage", typeof(int));
        table.Columns.Add("Drug", typeof(string));
        table.Columns.Add("Patient", typeof(string));
        table.Columns.Add("Date", typeof(DateTime));

        // Fill the data table to make it take about 1 G memory.
        for (int i = 0; i …
Run Code Online (Sandbox Code Playgroud)

c# memory datatable memory-management

9
推荐指数
2
解决办法
6054
查看次数

SQL Server视图存储过程完整关系

我正在使用SQLSEVER 2012 Management Studio在SQLSERVER 2012 Express数据库上处理一堆非常复杂的存储过程.

例如我有一个存储过程SP1调用另一个存储过程SP2和SP2调用SP3,SP3调用SP4 ...

我希望看到的是一个图表,它可以为我提供这些存储过程与这些存储过程中使用的所有表之间的完整关系.

我已经尝试过SQL Server管理工作室提供的视图依赖项工具,但有时当我单击所选存储过程的"查看依赖项"时,它会错过后代存储过程.此外,它无法显示这些存储过程之间关系的完整画面.

有什么工具可以帮我这个吗?或者有关如何理解复杂关系存储过程的任何建议?

sql-server diagram stored-procedures relational-database

5
推荐指数
1
解决办法
1182
查看次数

OracleBulkCopy 内存泄漏(OutOfMemory 异常)

下面是我用来将数据从临时表 dataTable 批量复制到 Oracle 数据库中的 destTable 的代码。dataTable 有大约 200 万条记录。

using (OracleBulkCopy bulkCopy = new OracleBulkCopy(VMSDATAConnectionString))
            {
                try
                {
                    foreach (OracleBulkCopyColumnMapping columnMapping in columnMappings)
                        bulkCopy.ColumnMappings.Add(columnMapping);

                    bulkCopy.DestinationTableName = destTableName;
                    //bulkCopy.BatchSize = dataTable.Rows.Count;
                    //bulkCopy.BulkCopyTimeout = 100;                   
                    int defaultSize = 5000;
                    int.TryParse(ConfigurationManager.AppSettings["OracleBulkCopyBatchSize"], out defaultSize);
                    bulkCopy.BatchSize = defaultSize;
                    int timeOut = 100;
                    int.TryParse(ConfigurationManager.AppSettings["OracleBulkCopyTimeout"], out timeOut);
                    bulkCopy.BulkCopyTimeout = timeOut;
                    Console.WriteLine("Bulk insert from {0} to {1} started at: {2}\r\nBatchSize : {3}, BulkCopyTimeout : {4} ", dataTable.TableName, destTableName, DateTime.Now.ToString("HH:mm:ss"), bulkCopy.BatchSize.ToString(), bulkCopy.BulkCopyTimeout.ToString());
                    bulkCopy.WriteToServer(dataTable);
                    Console.WriteLine("Bulk insert from {0} to …
Run Code Online (Sandbox Code Playgroud)

c# oracle memory-leaks bulkinsert sqlbulkcopy

3
推荐指数
1
解决办法
2607
查看次数