我在使用XML填充TreeView層次結構時遇到了「內存不足」問題。我們的XML結構非常複雜,並且不是固定的格式。有多個級別的子節點。我使用遞歸來迭代XML並填充TreeView結構。我試圖調用GC.Collect。清除記憶,但它仍然拋出相同的錯誤。 我正在使用.NET Framework 3.5的C#進行開發。填充TreeView時出現「內存不足」
如果你能幫我找到解決方案,我將不勝感激。
我提供以下
private void addTreeNode(XmlNode xmlNode, TreeNode treeNode)
{
string attribute = "";
treeView1.ImageList = imageList1;
treeViewResponse.ImageList = imageList1;
XmlNode xNode;
TreeNode tNode;
XmlNodeList xNodeList;
foo.MoveToFollowing(XPathNodeType.Element);
namespaces1 = foo.GetNamespacesInScope(XmlNamespaceScope.All);
if (xmlNode.HasChildNodes)
{
treeNode.ImageIndex = 0;
treeNode.SelectedImageIndex = 0;
xNodeList = xmlNode.ChildNodes;
for (int x = 0; x <= xNodeList.Count - 1; x++)
{
xNode = xmlNode.ChildNodes[x];
treeNode.Nodes.Add(new TreeNode(xNode.Name));
tNode = treeNode.Nodes[x];
//treeNode.Nodes[x].ImageIndex = -1;
addTreeNode(xNode, tNode);
}
}
else
{
treeNode.ImageIndex = 1;
treeNode.NodeFont = new Font("Arial", 8, FontStyle.Bold);
treeNode.SelectedImageIndex = 1;
treeNode.Text = xmlNode.OuterXml.Trim();
}
}
您需要使用較少的內存。例如,不要爲每個節點創建一個「新的字體」,只需創建一個字體並重新使用它即可。每個進程有10,000個圖形對象的限制,並且一個字體被視爲一個圖形對象。 –
剛剛遇到這個問題。 RaymondChen和@Steven Knauber的答案爲我工作,但如果有人感興趣,我發現[這個線程有更深入的討論](http://forum.memprofiler.com/viewtopic.php?t=1254)(顯然這個問題至少從.NET 2.0開始!) – smead