在我的应用程序中,我必须创建一个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);
}