为什么我收到:“抛出了‘System.OutOfMemoryException’类型的异常”

问题描述 投票:0回答:1

我正在用 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>

c# xml wpf mvvm openstreetmap
1个回答
0
投票

如果您需要使用 AnyCpu 或 x86 编译模式让您的库工作,那么主应用程序很可能是 x86(又名 32 位)构建的,因此适用较低的内存限制。因此,简单的猜测就是您的列表太大了。如果您要将数据保存到文件中,也许可以考虑使用一些流式 XML int 文件,而不是将整个数据保存在内存中。

© www.soinside.com 2019 - 2024. All rights reserved.