1

我正在使用 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# 代码

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 以便我可以处理它。

4

1 回答 1

0

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

于 2014-02-17T14:29:17.143 回答