Ошибка при нехватке памяти при загрузке данных в d # - PullRequest
0 голосов
/ 01 октября 2019

У меня есть запас данных ohlc, общее количество записей составляет 4 миллиона записей, но когда я загружаю данные в Dataatable из адаптера данных, это дает мне ошибку нехватки памяти.

Запрос

SELECT company_id,trading_Date,trading_open,trading_high, trading_low,trading_close,trading_vol 
FROM company_trading1sIntl 
WHERE company_id = 'YM' 
ORDER BY trading_Date 

Функция

public DataTable FillDT(string query, SqlConnection conn)
{
    SqlCommand sqlcmd = new SqlCommand(query,conn);
    SqlDataAdapter sqlda = new SqlDataAdapter(sqlcmd);
    DataTable dt = new DataTable();

    try
    {
        sqlda.Fill(dt);
        if (dt.Rows.Count > 0)
        {
            return dt;
        }
        else
        {                   
            return null;
        }
    }
    catch(Exception ex)
    {
        return null;
    }        
} 

1 Ответ

0 голосов
/ 01 октября 2019

Первый ответ, который вам нужно задать себе: зачем загружать все эти записи в таблицу данных? Что делать с SqlDataReader для чтения данных, их редактирования и повторения (например) 100 000 строк. SqlBulkCopy для их повторной вставки в таблицу выполняется быстрее, чем адаптер. Заполните() и, возможно, вы можете избежать хранения всех 4.000.000 записей в памяти.

ЕСЛИ вам нужно обрабатывать все данные в одном «выборе», у вас нет шансов отредактировать свой web.Config, как показано ниже:

<runtime>
    <gcAllowVeryLargeObjects enabled="true" />    
</runtime>

И скомпилируйте двоичный файл x64.

...