我需要提供一个包含600,000条记录的XML文件进行下载,但不允许将文件保存到磁盘上。我尝试直接将XML写入流并提供下载,但遇到了问题。因此,我首先在磁盘上创建了XML文件,并将数据写入其中,然后尝试按字节读取并提供下载,最后从磁盘中删除该文件。但是在执行"Byte[] b = File.ReadAllBytes(filepath);"时出现了"system.outofmemoryexception"错误。
以下是我的代码:
以下是我的代码:
string name = string.Format("{0:yyyyMMddHHmmss}", DateTime.Now);
string filename = "TestFile.xml";
string filepath = ConfigurationManager.AppSettings["XmlFiles"] + "\\" + filename;
DataTable dataTable = dsData.Tables[0];
FileStream fs =new FileStream(filepath, FileMode.Create);
XmlWriterSettings xws = new XmlWriterSettings { OmitXmlDeclaration = true };
using (XmlWriter xmlWriter = XmlWriter.Create(fs,xws))
{
xmlWriter.WriteStartElement("root");
foreach (DataRow dataRow in dataTable.Rows)
{
xmlWriter.WriteStartElement("datanode");
foreach (DataColumn dataColumn in dataTable.Columns)
{
xmlWriter.WriteElementString(dataColumn.ColumnName.Replace("\n\r", " ")
.Replace("\n", " ").Replace("\r", " "), Convert.ToString(dataRow[dataColumn]).Replace("\n\r", " ").Replace("\n", " ").Replace("\r", " "));
}
xmlWriter.WriteEndElement();
}
xmlWriter.WriteEndElement();
xmlWriter.Flush();
xmlWriter.Close();
}
fs.Close();
Byte[] b = File.ReadAllBytes(filepath);
if (File.Exists(filepath))
File.Delete(filepath);
string s = string.Format("{0:yyyyMMddHHmmss}", DateTime.Now);
HttpContext.Current.Response.ContentType = "application/xml";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment; filename=" + s + ".xml" + "");
HttpContext.Current.Response.BinaryWrite(b);
HttpContext.Current.Response.End();
有没有其他处理大量记录的方式?