我正在用 C# 编写 osm(xml) 文件。
使用
List<T>
,我使用 foreach
循环编写子元素(osmelement)。当时,我收到错误:
System.OutOfMemoryException' 被抛出
在小型 wpf 项目中,如果我将目标平台设置为 64x 位,它工作正常,但我在我的主项目中需要它,它只能在 AnyCPU 或 x86 中工作。但如果设置为 AnyCPU,我会收到此错误。
请参考代码。
有没有其他方法可以使用 osm(xml) 文件中的列表一次添加子元素?
XmlElement osmElement = doc.CreateElement("osm");
osmElement.SetAttribute("version", "0.6");`
foreach (var item in osmNodes)
{
// getting error here
osmElement.AppendChild(item.ToXmlElement(doc));
}
public XmlElement ToXmlElement(XmlDocument doc)
{
//string _datetimestamp = DateTime.UtcNow.ToString();
XmlElement nodeElement = doc.CreateElement("node");
nodeElement.SetAttribute("id", Id.ToString());
nodeElement.SetAttribute("lat", Lat.ToString());
nodeElement.SetAttribute("lon", Lon.ToString());
return nodeElement;
}
Expected Output in file
<osm version='0.6' upload='false'>
<node id='-101752' lat='18.4508611' lon='77.3322991' />
<node id='-101753' lat='18.4508432' lon='77.3326495' />
<node id='-101754' lat='18.4508658' lon='77.332924' />
<osm/>
其中
osmNodes
定义为 List<T>
。
如果您需要使用 AnyCpu 或 x86 编译模式让您的库工作,那么主应用程序很可能是 x86(又名 32 位)构建的,因此适用较低的内存限制。因此,简单的猜测就是您的列表太大了。如果您要将数据保存到文件中,也许可以考虑使用一些流式 XML int 文件,而不是将整个数据保存在内存中。