1

asp.net と Oracle SQL データベースを使用しています。

データベースには、特定の ID に基づいてファイル (この場合は XML ファイル) を返す簡単な手順があります。.net アプリケーションで、OracleConnection を開き、OracleDataReader を使用してファイルを文字列に読み取ります。

これは、ファイル サイズが非常に大きくなる (360 MB) まで正常に機能し、「System.OutOfMemoryException」障害が発生します。これは、プロセスのメモリ使用量が 800 MB を超えるために発生すると推測されます。

ファイルを取得するためのより良い方法はありますか、または 800 MB の制限を増やすことは可能ですか? ここでは時間は問題ではありません。

データベースでの手続き

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