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 を作成して処理できるようにします。