Получить большой файл из базы данных CLOB

Я работаю с asp.net и базой данных Oracle SQL.

У меня есть простая процедура в базе данных, которая возвращает файл (в данном случае файл XML) на основе заданного идентификатора. В приложении .net я открываю OracleConnection и читаю файл в строку с помощью OracleDataReader.

Это работает нормально, пока размер файла не станет очень большим (360 МБ), что вызывает ошибку «System.OutOfMemoryException», которая, как я предполагаю, происходит из-за того, что процесс использует более 800 МБ памяти.

Есть ли лучший способ получить файл или можно увеличить лимит в 800 МБ? Время здесь не проблема.

Процедура в базе данных

PROCEDURE get_xml(xml_id    IN NUMBER,
                  p_records OUT SYS_REFCURSOR)
IS
  BEGIN

    OPEN p_records FOR
      SELECT xml
        FROM allxml
      WHERE id = xml_id;

  END get_xml;

С# код

using (OracleConnection oConn = new OracleConnection(ora_connection))
{
    Procedure proc = null;
    OracleParameter result = null;
    oConn.Open();
    OracleDataReader dr = null;
    proc = Procedure.CreateProcedure("get_xml", oConn)
        .Number("xml_id", id)
        .RefCursor("p_records", out result)
                        .ExecuteReader(out dr);
    if (dr.Read())
    {
        xml = dr.GetString(0);
    }
}

XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);

return doc;

Как видите, я загружаю файл в строку, а затем создаю xml, чтобы обработать его.


person Debomboys    schedule 11.09.2013    source источник
comment
Почему вы читаете файл в строку? Что вы собираетесь с этим делать?   -  person Vincent Malgrat    schedule 11.09.2013
comment
опубликуйте какой-нибудь код чтения clob из оракула, тогда только мы сможем что-то подсказать.   -  person Vijay    schedule 11.09.2013
comment
Нет места для одновременного хранения всех xml в памяти. Возможно, вам придется сделать что-то вроде этого: stackoverflow.com/a/15146498/814064   -  person dcaswell    schedule 11.09.2013
comment
Вы изучали сжатие данных при отправке?   -  person PSK    schedule 17.02.2014


Ответы (1)


Лучшим подходом для приложения с несколькими базами данных может быть сохранение в БД только пути/ссылки на файл и сохранение этого большого двоичного объекта в файловой системе.

person jean    schedule 17.02.2014