Кто здесь?А главное зачем?
Повестка дняО себеЦель докладаПоставленные вопросыДоклад по цикламДоклад по методам сериализацииВыводыВопросы
Сухих Евгений ИвановичПроектIntraNote,продуктDocuNoteWorkflowdeveloperЛюбитель поговорить и послушатьО себе
Tips to boost .NET Performance (Цели)Поделиться опытом
ВопросыВ нашем проекте довольно таки часто приходится иметь дело с массивами элементов (передача их с сервера на клиент и обратно, прохождение по массиву/коллекции). В связи с этим возникли вопросы выбора оптимального:Циклического оператораМеханизма сериализацииМного других вопросов…
I prefer number!!!
Единица измерения скоростиЯ бы выбрал миллисекунды, но и их слишком многоВ качестве временной шкалы выбраны тикиТолько не спрашивайте что такое тики – я не знаю…
Приношу извинения за [Ctrl + c] [Ctrl + v]
Циклы - шмиклыfor (int x = 1; x <= 5; x++) {… ;}
while (y <= 5){... y++;}
do {... y++;} while (y <= 5)
foreach (int i in array) {…}
Рекурсия?
Варианты?! …for (int x = 1; x <= 5; x++) {… ;}
While /Do … while
FOREACHvartmp = obj.GetEnumerator();int i;while(tmp.MoveNext()) {    i = tmp.Current;    {...} // your code}
Время работы с малыми массивамиБазовыми было решено использовать массивы небольшого размера.20 записей50 записей100 записейНу и для сравнения массивы побольше:10 000100 000
ПримечательноПервое обращение для всех циклов существенно дольше последующих. ПОЧЕМУ?Время выполнения операции в тикахРазмер массива
ОтветыЯ думаю что это из-за первой компиляции класса?!А что думаете Вы?
Скорость перебора массива Integer на малых размерахВремя выполнения операции в тикахПОЧЕМУ?Размер массива
Что видно сгистограммы:ForEachи For циклы работают явно быстрее.Возможно это связано с типом перебираемых данных.Давайте возьмем другие типы данных.
String ()Время выполнения операции в тикахРазмер массиваВыполняется в целом дольше. Почему?
Double ()Перебор 50-ти элементов длится дольше чем 100Время выполнения операции в тикахРазмер массиваМистика !!!
Date ()Время выполнения операции в тикахРазмер массива
CollectionItem ()Время выполнения операции в тикахРазмер массива
CollectionItem ()()Время выполнения операции в тикахРазмер массиваВремя в целом увеличилось
CollectionItem ()() ()Время выполнения операции в тикахРазмер массива
«For»и «ForEach» быстреечем «Do»и «While»Это не открытие Америки, это наглядный материал для тех, кто как и я, не любит читать!!!Возникает два вопроса:Почему«Do»и «While» медленные«For»или «ForEach»
WhileВлияют ли по разному записанные условия на результат<, <=, >, >==Давайте попробуем
While c разными операторамиВремя выполнения операции в тикахответ: НЕТ!!!Размер массива
«For»или «ForEach»на небольших массивахВремя выполнения операции в ТикахРазмер массива
«For»или «ForEach»потеря лидерстваВремя выполнения операции в ТикахРазмер массива
«For»или «ForEach»на больших размерахВремя выполнения операции в ТикахРазмер массива
Так это бы выглядело в миллисекундахВремя выполнения операции в МиллисекундахРазмер массива
«For»или «ForEach»Кикбоксер 1Время выполнения операции в ТикахРазмер массива
«For»или «ForEach»Матрица часть 2Время выполнения операции в ТикахРазмер массива
«For»или «ForEach»Крепкий орешек 3Время выполнения операции в ТикахРазмер массива
«For»или «ForEach»Просто МарияВремя выполнения операции в ТикахРазмер массива
«For»или «ForEach»Санта БарбараВремя выполнения операции в ТикахРазмер массива
ВыводДля перебора элементов небольших массивов целесообразнее использовать ForEachДля просмотра больших массивов – ForВышеприведенные данные верны только для моей тестовой машины
ОпределениеСериализация (в программировании) — процесс перевода какой-либо структуры данных в последовательность битов. Обратной к операции сериализации является операция десериализации — восстановление начального состояния структуры данных из битовой последовательности.(с) Википедия
КритерииРазмер данныхВремя сериализации/десериализацииЧитабельностьСовместимость версий
Что пишут другие
Разные сериализаторыSoapFormatterBinaryFormatterXmlSerializerDataContractSerializerNetDataContractSerializerLosFormatterJsonDataContractSerializer
SoapFormatterBeginning with the .NET Framework version 3.5, this class is obsolete. Use BinaryFormatter instead.Used for Net Remoting
BinaryFormatter
NetDataContractSerializer
DataContractSerializer
NetDataContractSerializer
LosFormatter
DataContractJsonSerializer
Скорость
Скорость в тикахГребанные тикиКоличество элементов в листе
Скорость в миллисекундахМиллисекундыКоличество элементов в листе
Размер в килобайтахКбКоличество элементов в листе
Размер в килобайтахКбНо что же происходит с увеличением количества элементов в массиве?НИЧЕГО!Количество элементов в листе
LosFormatterвыигрывает и по скорости и по времениВот такой вид имеют сериализованные данные: /wEyigQAAQAAAP////8BAAAAAAAAAAwCAAAAQVRlc3QgbG9vcHMsIFZlcnNpb249MS4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBQEAAAAYdGVzdF9sb29wcy5DMS5Db2xsZWN0aW9uBQAAAAxfRGVzY3JpcHRpb24GT3ZlcmxvDUxpc3RgMStfaXRlbXMMTGlzdGAxK19zaXplD0xpc3RgMStfdmVyc2lvbgECBAAAHnRlc3RfbG9vcHMuQzEuQ29sbGVjdGlvbkl0ZW1bXQIAAAAICAIAAAAKCgkDAAAAAgAAAAIAAAAHAwAAAAABAAAABAAAAAQcdGVzdF9sb29wcy5DMS5Db2xsZWN0aW9uSXRlbQIAAAAJBAAAAAkFAAAADQIFBAAAABx0ZXN0X2xvb3BzLkMxLkNvbGxlY3Rpb25JdGVtBQAAAA1fSW50ZWdlclZhbHVlDF9TdHJpbmdWYWx1ZQ5fRGF0ZVRpbWVWYWx1ZQ1fQm9vbGVhblZhbHVlDF9Eb3VibGVWYWx1ZQABAAAACA0BBgIAAAAoalpVBgYAAAAQMCwxNTkxODcxMTg1OTY5Nag1HJdvMc6IAQAAAAAAAFBAAQUAAAAEAAAAKGpaVQYHAAAAEDAsMTU5MTg3MTE4NTk2OTWoNRyXbzHOiAEAAAAAAABQQAs=Я ничего не понял что тут засериализовано, а ВЫ?
Что мы выбралиNetDataCintractSerializer
SourcesLearn C# Programming Tutorial Lesson 4 – LoopsHow do foreach loops work in C#?Сериализация в .NET. Выпрямляем своими рукамиBinaryFormatteralternativesBinaryFormatter ClassBinary & XMLhttp://stackoverflow.com/questions/365615/in-net-which-loop-runs-faster-for-or-foreach
Чегособственно я хочу от Вас!!!Наступать на грабли приятно, но не выгодно – давайте создадим карту граблейЕсли грабли хаотически прыгают по этой карте – давайте научимся их отлавливать в конкретный момент времениДавайте грабли поставим в сарай!!!

04 net saturday eugene sukhikh ''the basic performance questions''