Анализируйте меньший XML несколько раз или больший XML один раз, используя LINQ to XML - PullRequest
1 голос
/ 21 апреля 2011

Я пишу процесс для веб-сайта ASP.NET, который будет искать определенное значение из файла XML и выполнять перенаправление. Я использую LINQ (C #) для анализа этого XML.

Я достиг точки принятия решения, когда мне нужно искать альтернативные значения в пределах одного и того же запроса. У меня есть два решения:

  1. Поиск каждого значения в отдельности. Это будет означать разбор XML дважды. Но размер XML будет намного меньше

  2. Сохранение нескольких значений в XML и разбор XML один раз. Это сделает XML больше.

Так какой подход будет иметь меньшую нагрузку на производительность, учитывая это для веб-сайта с некоторым параллелизмом?

Проще говоря, я должен разобрать 200 элементов один раз ИЛИ 100 элементов дважды?

Ответы [ 4 ]

2 голосов
/ 21 апреля 2011

Ни.Кэшируйте анализируемый результат, пока он не будет изменен (если когда-либо).

1 голос
/ 21 апреля 2011

Почему бы не проанализировать его в памяти, а затем выполнить поиск в памяти?Например, прочитайте его в Dictionary <> вашего объекта Application.Поместите FileystemWatcher в файл и повторите анализ, если он изменился.

0 голосов
/ 22 апреля 2011

Хорошо, я извлек результаты для обоих сценариев через мой запрос Linq, а затем перебрал два XElement, чтобы определить, какой из них мне нужно использовать.Мне просто нужно было подумать немного больше.Итак, теперь у меня есть намного меньший XML и один поиск.

     IEnumerable<XElement> mping = (from mpings in mpingXML.Elements("mping")
                                           where mpings.Element("sptrn").Value.Equals(sourceURL, StringComparison.InvariantCultureIgnoreCase)
                                           && (mpings.Attribute("lcl").Value.Equals(locale, StringComparison.InvariantCultureIgnoreCase) || mpings.Attribute("lcl").Value.Equals("ALL", StringComparison.InvariantCultureIgnoreCase))
                                           select mpings);
0 голосов
/ 22 апреля 2011

Мои $ 0,02:

кэширование XElement (и многократного запроса), который достаточно хорош, пока ваш профилировщик не скажет вам иначе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...