获取XML值非常慢/超时C#

时间:2014-06-20 14:05:55

标签: c# xml

在我的应用程序中,我必须创建一个XML元素,在需要检查之后我需要插入这个值(我为什么要转换它)

int currentXMLTimeValue = Convert.ToInt32(elemList[i].Attributes["tTime"].Value);

调试时,我遇到了这条线,并且可以等待超过10分钟,我得到一个超时异常。正如你可能猜测我正在通过一个循环运行它,所以我不会在动作上花费那么多时间,这是非常重要的。

我的其他转换根本不是很慢

int currentEDFTimeValue = Convert.ToInt32(lines[j][2]); 

然后必须是使用时间的价值调用,否则我怎么能得到这个值或者我怎样才能加快速度呢?

elemList[i].Attributes["tTime"].Value 

以下是for循环的其余部分

XmlWriter writer = null;
XmlDocument doc = new XmlDocument();
doc.Load(oldFile);
XmlNodeList elemList = doc.GetElementsByTagName("test");

for (int j = 0; j < lines.Length; j++)
        {
            int currentEDFTimeValue = Convert.ToInt32(lines[j][2]); 
            for (int i = 0; i < elemList.Count; i++)
            {
                XmlElement newElem = doc.CreateElement(replacementElement);
                int currentXMLTimeValue = Int32.Parse(elemList[i].Attributes["tTime"].Value);
                if (currentEDFTimeValue != currentXMLTimeValue)
                {
                    newElem.SetAttribute("tTime", currentEDFTimeValue.ToString());

                    if (currentEDFTimeValue > currentXMLTimeValue)
                    {
                        eventNode.InsertAfter(newElem, elemList[i]);
                    }
                    else if (currentEDFTimeValue < currentXMLTimeValue)
                    {
                        eventNode.InsertBefore(newElem, elemList[i]);
                    }
                }
            }
        }

这些xml文件可能有超过50,000行

修改

一些测试发现这是非常快的

 var test = elemList;

但是获取特定的xml节点非常慢

 var test = elemList[i];

可能是因为我在使用它时将节点/元素添加到列表中吗?

EDIT2:

我有另一个功能或多或少相同,但这也很快

List<List<int>> offsets = new List<List<int>>();
 for (int i = 0; i < elemList.Count; i++)
            {
                var xmlDur = Convert.ToInt32(elemList[i].Attributes["duration"].Value);
                List<int> offset = new List<int>();
                for (int j = 0; j < lines.Length; j++)
                {
                            var edfDur = Convert.ToInt32(lines[j][4]);
                            if (Math.Abs(edfDur - xmlDur) <= 2)
                            {
                               for (int h = 0; h < offsets[offsets.Count - 2].Count; h++)
                               {
                                    startTimeDistance = Convert.ToInt32(elemList[i].Attributes["tTime"].Value) - Convert.ToInt32(lines[j][3]);
                                    offset.Add(startTimeDistance);
                                }
                            }
                        }

                if(offset.Count > 0) offsets.Add(offset);

            }

0 个答案:

没有答案