получение значения XML очень медленно / время ожидания C#

#c# #xml

#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];
  

Может быть, это потому, что я добавляю узлы / элементы в список во время его использования?

ПРАВКА2:

У меня есть другая функция, которая более или менее такая же, но она также очень быстрая

 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);

            }
  

Комментарии:

1. Int32.Parse немного быстрее, но что заставляет вас думать Convert , что функция является узким местом?

2. Он не Convert.ToInt32 работает медленно. Отредактируйте свой пост с кратким кодом, который воспроизводит проблему, и мы сможем помочь.

3. Сколько элементов вы обрабатываете? Насколько дорог только elemList[i].Attributes["tTime"].Value вызов?

4. Я думаю, что коллекция ‘Attributes’ ищет все дочерние узлы для атрибута «tTime», что, вероятно, заставляет его работать так долго.

5. Какова среда? Это веб-приложение, Asp.net , или строго на базе ПК? (10 минут звучит так, как будто должны быть задействованы какие-то сетевые коммуникации.)