Как определить время синтаксического анализа при преобразовании XSLT с помощью кода C #?

Я написал код C# для запуска преобразования XML в XML (XSLT). Поскольку преобразование зависит от размера XML, а мой входной XML-файл может варьироваться от килобайтов до мегабайтов, я хочу определить «время, затраченное на анализ входного файла и создание выходных данных». Я могу отобразить « value" через графический интерфейс или консоль, с этим проблем нет. Цель состоит в том, чтобы сохранить "время в секундах или миллисекундах" в переменной

любые ссылки для справки или руководства, относящиеся к этой идее, также будут полезны..

Зависит ли это от конфигурации системы?
Я имею в виду, что... время синтаксического анализа зависит от системы к системе в зависимости от среды?
Если да... независимый от системы код?
с нетерпением жду ответа .. thanQ ..


person InfantPro'Aravind'    schedule 25.11.2009    source источник
comment
обновленный пример, чтобы показать отдельное время синтаксического анализа/преобразования   -  person Marc Gravell    schedule 25.11.2009
comment
Вы упускаете значительную часть общего времени преобразования: время, необходимое для компиляции самой таблицы стилей. Подробности смотрите в моем ответе. :)   -  person Dimitre Novatchev    schedule 21.02.2010
comment
Эй, что случилось с твоей картинкой? Раньше ты была больше похожа на Дженнифер Коннели... Пожалуйста, верни это снова... :)   -  person Dimitre Novatchev    schedule 01.04.2010
comment
о, какая-то ошибка с gravatar.com,   -  person InfantPro'Aravind'    schedule 02.04.2010
comment
Вижу, сейчас восстановили картинки. gravatar.com? Я должен проверить, что это такое - они были похожи на единорога с радугой...   -  person Dimitre Novatchev    schedule 02.04.2010


Ответы (2)


Вы упускаете значительную часть общего времени преобразования: время, необходимое для компиляции самой таблицы стилей.

Вот как получить это время:

// Create the XslCompiledTransform and load the stylesheet.
XslCompiledTransform xslt = new XslCompiledTransform();

Stopwatch watch = Stopwatch.StartNew();  
  xslt.Load("someXsl.xsl");
watch.Stop();   

TimeSpan xsltCompileTime = watch.Elapsed;

Обратите внимание, что время загрузки/компиляции таблицы стилей XSLT с помощью XslCompiledTransform обычно очень велико по сравнению со временем, необходимым для выполнения типичных небольших преобразований. Вот почему в производственной системе можно рассмотреть возможность кэширования загруженной таблицы стилей и ее повторного использования без загрузки.

person Dimitre Novatchev    schedule 21.02.2010
comment
@Dimitre, да, вы правы, но я изменил его в своей практической реализации, мне просто нужна была идея реализации .. поэтому я принял Марка .. В моем коде таймер запускается до XML, файлы XSL загружаются и останавливаются после завершения преобразования и создания файла o/p. Требуется только один таймер, который отображает время преобразования (в миллисекундах) в окне консоли. В любом случае спасибо за беспокойство.. :-) - person InfantPro'Aravind'; 22.02.2010

Я не уверен, что понимаю полностью, но, возможно, просто:

Stopwatch watch = Stopwatch.StartNew();
// where "xslt" is your prepared XslTransform or XslCompiledTransform
xslt.Transform(input, args, results); 
watch.Stop();
TimeSpan elapsed = watch.Elapsed; // how long

Если вам нужно прошедшее время в секундах и миллисекундах:

string seconds = elapsed.TotalSeconds.ToString("0.000");

Если вам нужны отдельные тайминги для синтаксического анализа и преобразования:

Stopwatch watch = Stopwatch.StartNew();
XPathDocument sourceDoc = new XPathDocument(location);
watch.Stop();
TimeSpan parseTime = watch.Elapsed;
watch.Reset();

watch.Start();
xslt.Transform(sourceDoc, args, results);
watch.Stop();
TimeSpan transformTime = watch.Elapsed;
person Marc Gravell    schedule 25.11.2009
comment
Не работает .. ошибка: Секундомер не определен или не в текущем контексте .. :( - person InfantPro'Aravind'; 25.11.2009
comment
Добавьте using System.Diagnostics; вверху. - person Marc Gravell; 25.11.2009
comment
Или; нажмите на слово «Секундомер» и нажмите [Ctrl]+[.], затем [Ret]; или щелкните правой кнопкой мыши -> Разрешить -> с помощью {blah} - person Marc Gravell; 25.11.2009
comment
Зависит ли это от конфигурации системы? Я имею в виду, что время синтаксического анализа варьируется от системы к системе в зависимости от среды? Если да... то можно ли сделать его независимым от системы кодом? с нетерпением жду ответа. - person InfantPro'Aravind'; 25.11.2009
comment
Предполагая, что вы по-прежнему имеете в виду время, затрачиваемое на анализ моего входного файла и создание вывода, тогда оно всегда будет зависеть от локальных возможностей ЦП и ввода-вывода, но один и тот же код будет независимо от этого. Или вам нужны два числа — одно для анализа ввода, другое для преобразования? - person Marc Gravell; 25.11.2009