C# 从数据库CLOB检索大文件

C# 从数据库CLOB检索大文件,c#,asp.net,sql,oracle,clob,C#,Asp.net,Sql,Oracle,Clob,我正在使用asp.net和Oracle SQL数据库 我在数据库中有一个简单的过程,它根据给定的ID返回一个文件(在本例中是一个XML文件)。在.net应用程序中,我打开一个OracleConnection,并使用OracleDataReader将文件读取为字符串 在文件大小变得非常大(360mb)之前,这可以正常工作,这会导致“System.OutOfMemoryException”错误,我猜这是因为进程的内存使用量超过800mb 是否有更好的方法检索文件,或者是否可以增加800mb的限制?时

我正在使用asp.net和Oracle SQL数据库

我在数据库中有一个简单的过程,它根据给定的ID返回一个文件(在本例中是一个XML文件)。在.net应用程序中,我打开一个OracleConnection,并使用OracleDataReader将文件读取为字符串

在文件大小变得非常大(360mb)之前,这可以正常工作,这会导致“System.OutOfMemoryException”错误,我猜这是因为进程的内存使用量超过800mb

是否有更好的方法检索文件,或者是否可以增加800mb的限制?时间在这里不是问题

数据库中的过程

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;
c#代码


如您所见,我将文件加载到字符串中,然后创建一个xml,以便处理它。

多数据库应用程序的最佳方法是仅在数据库中保留文件的路径/链接,并将该大blob存储在文件系统中。

为什么将文件读取为字符串?你希望用它做什么?发布一些从oracle读取clob的代码,然后只有我们可以提出一些建议。没有空间一次将所有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;