Я работаю с 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, чтобы обработать его.