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

60
Кто здесь? А главное зачем?

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

Page 1: 04 net saturday eugene sukhikh ''the basic performance questions''

Кто здесь?

А главное зачем?

Page 2: 04 net saturday eugene sukhikh ''the basic performance questions''

Повестка дня

1. О себе2. Цель доклада3. Поставленные вопросы4. Доклад по циклам5. Доклад по методам сериализации6. Выводы7. Вопросы

Page 3: 04 net saturday eugene sukhikh ''the basic performance questions''

• Сухих Евгений Иванович• Проект IntraNote, продукт DocuNote• Workflow developer• Любитель поговорить и послушать

О себе

Page 4: 04 net saturday eugene sukhikh ''the basic performance questions''

Tips to boost .NET Performance (Цели)

• Поделиться опытом

Page 5: 04 net saturday eugene sukhikh ''the basic performance questions''

ВопросыВ нашем проекте довольно таки часто приходится иметь дело с массивами элементов (передача их с сервера на клиент и обратно, прохождение по массиву/коллекции). В связи с этим возникли вопросы выбора оптимального:

• Циклического оператора

• Механизма сериализации

• Много других вопросов…

Page 6: 04 net saturday eugene sukhikh ''the basic performance questions''

I prefer number!!!

Page 7: 04 net saturday eugene sukhikh ''the basic performance questions''

Единица измерения скорости

Я бы выбрал миллисекунды, но и их слишком много

В качестве временной шкалы выбраны тики

Только не спрашивайте что такое тики – я не знаю…

Page 8: 04 net saturday eugene sukhikh ''the basic performance questions''

[Ctrl + c]

[Ctrl + v]

Приношу извинения за

Page 9: 04 net saturday eugene sukhikh ''the basic performance questions''

Циклы - шмиклы

- for (int x = 1; x <= 5; x++) {… ;}

- while (y <= 5) {... y++;}

- do {... y++;} while (y <= 5)

- foreach (int i in array) {…}

- Рекурсия?

- Варианты?! …

Page 10: 04 net saturday eugene sukhikh ''the basic performance questions''

for (int x = 1; x <= 5; x++) {… ;}

Page 11: 04 net saturday eugene sukhikh ''the basic performance questions''

While /Do … while

Page 12: 04 net saturday eugene sukhikh ''the basic performance questions''

FOREACH

var tmp = obj.GetEnumerator();int i;while(tmp.MoveNext()) { i = tmp.Current; {...} // your code}

Page 13: 04 net saturday eugene sukhikh ''the basic performance questions''

Время работы с малыми массивами

Базовыми было решено использовать массивы небольшого размера.• 20 записей• 50 записей• 100 записейНу и для сравнения массивы побольше:• 10 000• 100 000

Page 14: 04 net saturday eugene sukhikh ''the basic performance questions''

20 20 50 1000

5000100001500020000250003000035000400004500050000

DoForEachWhileFor

Примечательно

Размер массива

Врем

я вы

полн

ения

опе

раци

и в

тика

х

Первое обращение для всех циклов

существенно дольше последующих.

ПОЧЕМУ?

Page 15: 04 net saturday eugene sukhikh ''the basic performance questions''

Ответы

• Я думаю что это из-за первой компиляции класса?!

• А что думаете Вы?

Page 16: 04 net saturday eugene sukhikh ''the basic performance questions''

20 50 1000

100200300400500600700800900

1000

DoForEachWhileFor

Скорость перебора массива Integer на малых размерах

Размер массива

Врем

я вы

полн

ения

опе

раци

и в

тика

х

ПОЧЕМУ?

Page 17: 04 net saturday eugene sukhikh ''the basic performance questions''

Что видно с гистограммы:

• ForEach и For циклы работают явно быстрее.

Возможно это связано с типом перебираемых данных.

Давайте возьмем другие типы данных.

Page 18: 04 net saturday eugene sukhikh ''the basic performance questions''

20 50 1000

500

1000

1500

2000

2500

3000

3500

DoForEachWhileFor

String ()

Размер массива

Врем

я вы

полн

ения

опе

раци

и в

тика

х

Выполняется в целом дольше. Почему?

Page 19: 04 net saturday eugene sukhikh ''the basic performance questions''

20 50 1000

200

400

600

800

1000

1200

1400

1600

DoForEachWhileFor

Double ()

Размер массива

Врем

я вы

полн

ения

опе

раци

и в

тика

х Перебор 50-ти элементов длится дольше чем 100

Мистика !!!

Page 20: 04 net saturday eugene sukhikh ''the basic performance questions''

20 50 1000

500

1000

1500

2000

2500

3000

DoForEachWhileFor

Date ()

Размер массива

Врем

я вы

полн

ения

опе

раци

и в

тика

х

Page 21: 04 net saturday eugene sukhikh ''the basic performance questions''

20 50 1000

500

1000

1500

2000

2500

3000

3500

4000

DoForEachWhileFor

CollectionItem ()

Размер массива

Врем

я вы

полн

ения

опе

раци

и в

тика

х

Page 22: 04 net saturday eugene sukhikh ''the basic performance questions''

20 50 1000

1000

2000

3000

4000

5000

6000

7000

DoForEachWhileFor

CollectionItem ()()

Размер массива

Врем

я вы

полн

ения

опе

раци

и в

тика

х

Время в целом увеличилось

Page 23: 04 net saturday eugene sukhikh ''the basic performance questions''

20 50 1000

1000

2000

3000

4000

5000

6000

7000

DoForEachWhileFor

CollectionItem ()() ()

Размер массива

Врем

я вы

полн

ения

опе

раци

и в

тика

х

Page 24: 04 net saturday eugene sukhikh ''the basic performance questions''

«For» и «ForEach» быстрее чем «Do» и «While»

• Это не открытие Америки, это наглядный материал для тех, кто как и я, не любит читать!!!

Возникает два вопроса:• Почему «Do» и «While» медленные• «For» или «ForEach»

Page 25: 04 net saturday eugene sukhikh ''the basic performance questions''

While

Влияют ли по разному записанные условия на результат• <, <=, • >, >=• =

Давайте попробуем

Page 26: 04 net saturday eugene sukhikh ''the basic performance questions''

20 50 1000

100200300400500600700800900

1000

While >While =While <For

While c разными операторами

Размер массива

Врем

я вы

полн

ения

опе

раци

и в

тика

х

ответ: НЕТ!!!

Page 27: 04 net saturday eugene sukhikh ''the basic performance questions''

20 20 50 1000

50

100

150

200

250

ForForEach

Идеи?

«For» или «ForEach»на небольших массивах

Размер массива

Врем

я вы

полн

ения

опе

раци

и в

Тика

х

Page 28: 04 net saturday eugene sukhikh ''the basic performance questions''

1000 10000 1000000

2000

4000

6000

8000

10000

12000

14000

16000

18000

ForForEach

Где-то тут лидерство переходит к For

«For» или «ForEach»потеря лидерства

Размер массива

Врем

я вы

полн

ения

опе

раци

и в

Тика

х

Page 29: 04 net saturday eugene sukhikh ''the basic performance questions''

1000000 10000000 1000000000

2000000

4000000

6000000

8000000

10000000

12000000

14000000

16000000

18000000

ForForEach

«For» или «ForEach»на больших размерах

Размер массива

Врем

я вы

полн

ения

опе

раци

и в

Тика

х

Page 30: 04 net saturday eugene sukhikh ''the basic performance questions''

20 20 50100

100010000

100000

1000000

10000000

1000000000

1

2

3

4

5

6

7

8

ForForEach

Так это бы выглядело в миллисекундах

Размер массива

Врем

я вы

полн

ения

опе

раци

и в

Мил

лисе

кунд

ах

Page 31: 04 net saturday eugene sukhikh ''the basic performance questions''

1000020000

3000040000

5000060000

7000080000

90000

1000000

2000

4000

6000

8000

10000

12000

14000

16000

ForForEach

Он близок

«For» или «ForEach»Кикбоксер 1

Размер массива

Врем

я вы

полн

ения

опе

раци

и в

Тика

х

Page 32: 04 net saturday eugene sukhikh ''the basic performance questions''

2000021000

2200023000

2400025000

2600027000

2800029000

300000

2000

4000

6000

8000

10000

12000

ForForEach

Еще немного

«For» или «ForEach»Матрица часть 2

Размер массива

Врем

я вы

полн

ения

опе

раци

и в

Тика

х

Page 33: 04 net saturday eugene sukhikh ''the basic performance questions''

2100021100

2120021300

2140021500

2160021700

2180021900

220000

500

1000

1500

2000

2500

3000

3500

ForForEach

«For» или «ForEach»Крепкий орешек 3

Размер массива

Врем

я вы

полн

ения

опе

раци

и в

Тика

х

Page 34: 04 net saturday eugene sukhikh ''the basic performance questions''

2120021210

2122021230

2124021250

2126021270

2128021290

213000

50010001500200025003000350040004500

ForForEach

«For» или «ForEach»Просто Мария

Размер массива

Врем

я вы

полн

ения

опе

раци

и в

Тика

х

Page 35: 04 net saturday eugene sukhikh ''the basic performance questions''

2124021241

2124221243

2124421245

2124621247

2124821249

212500

500

1000

1500

2000

2500

3000

3500

4000

ForForEach

«For» или «ForEach»Санта Барбара

Размер массива

Врем

я вы

полн

ения

опе

раци

и в

Тика

х

Page 36: 04 net saturday eugene sukhikh ''the basic performance questions''

Вывод

• Для перебора элементов небольших массивов целесообразнее использовать ForEach

• Для просмотра больших массивов – For• Вышеприведенные данные верны только

для моей тестовой машины

Page 37: 04 net saturday eugene sukhikh ''the basic performance questions''

Сериализация (в программировании) — процесс перевода какой-либо структуры данных в последовательность битов. Обратной к операции сериализации является операция десериализации — восстановление начального состояния структуры данных из битовой последовательности.

(с) Википедия

Определение

Page 38: 04 net saturday eugene sukhikh ''the basic performance questions''

Критерии

• Размер данных• Время сериализации/десериализации• Читабельность• Совместимость версий

Page 39: 04 net saturday eugene sukhikh ''the basic performance questions''

Что пишут другие

Page 40: 04 net saturday eugene sukhikh ''the basic performance questions''

Разные сериализаторы

• SoapFormatter• BinaryFormatter• XmlSerializer• DataContractSerializer• NetDataContractSerializer• LosFormatter• JsonDataContractSerializer

Page 41: 04 net saturday eugene sukhikh ''the basic performance questions''

SoapFormatter

• Beginning with the .NET Framework version 3.5, this class is obsolete. Use BinaryFormatter instead.

Used for Net Remoting

Page 42: 04 net saturday eugene sukhikh ''the basic performance questions''

BinaryFormatter

Page 43: 04 net saturday eugene sukhikh ''the basic performance questions''

NetDataContractSerializer

Page 44: 04 net saturday eugene sukhikh ''the basic performance questions''

DataContractSerializer

Page 45: 04 net saturday eugene sukhikh ''the basic performance questions''

NetDataContractSerializer

Page 46: 04 net saturday eugene sukhikh ''the basic performance questions''

LosFormatter

Page 47: 04 net saturday eugene sukhikh ''the basic performance questions''

DataContractJsonSerializer

Page 48: 04 net saturday eugene sukhikh ''the basic performance questions''

Скорость

1 1 10 100 10000

2000

4000

6000

8000

10000

12000

14000

16000

Binary to fileBinary to memoryDataContaractNetDataContractXmlLosFormatterDataContractJson

И опять, на удивление, первое обращение заметно дольше чем последующие.

Особенно явно это выражено у XmlSerializer-а

Page 49: 04 net saturday eugene sukhikh ''the basic performance questions''

Скорость в тиках

1 10 100 10000

100

200

300

400

500

600

700

Binary to fileBinary to memoryDataContaractNetDataContractXmlLosFormatterDataContractJson

Количество элементов в листе

Греб

анны

е ти

ки

Page 50: 04 net saturday eugene sukhikh ''the basic performance questions''

Скорость в миллисекундах

1 1 10 100 1000 10000 1000000123456789

10

Binary to fileBinary to memoryDataContaractNetDataContractXmlLosFormatterDataContractJson

Количество элементов в листе

Мил

лисе

кунд

ы

Page 51: 04 net saturday eugene sukhikh ''the basic performance questions''

Размер в килобайтах

1 10 100 10000

10

20

30

40

50

60

70

80

Binary to fileBinary to memoryDataContaractNetDataContractXmlLosFormatterDataContractJson

Количество элементов в листе

Кб

Page 52: 04 net saturday eugene sukhikh ''the basic performance questions''

Размер в килобайтах

1000 10000 1000000

1000

2000

3000

4000

5000

6000

7000

8000

Binary to fileBinary to memoryDataContaractNetDataContractXmlLosFormatterDataContractJson

Количество элементов в листе

Кб Но что же происходит с увеличением количества элементов в массиве?

НИЧЕГО!

Page 53: 04 net saturday eugene sukhikh ''the basic performance questions''

LosFormatter выигрывает и по скорости и по времени

Вот такой вид имеют сериализованные данные: /wEyigQAAQAAAP////8BAAAAAAAAAAwCAAAAQVRlc3QgbG9vcHMsIFZlcnNpb249MS4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBQEAAAAYdGVzdF9sb29wcy5DMS5Db2xsZWN0aW9uBQAAAAxfRGVzY3JpcHRpb24GT3ZlcmxvDUxpc3RgMStfaXRlbXMMTGlzdGAxK19zaXplD0xpc3RgMStfdmVyc2lvbgECBAAAHnRlc3RfbG9vcHMuQzEuQ29sbGVjdGlvbkl0ZW1bXQIAAAAICAIAAAAKCgkDAAAAAgAAAAIAAAAHAwAAAAABAAAABAAAAAQcdGVzdF9sb29wcy5DMS5Db2xsZWN0aW9uSXRlbQIAAAAJBAAAAAkFAAAADQIFBAAAABx0ZXN0X2xvb3BzLkMxLkNvbGxlY3Rpb25JdGVtBQAAAA1fSW50ZWdlclZhbHVlDF9TdHJpbmdWYWx1ZQ5fRGF0ZVRpbWVWYWx1ZQ1fQm9vbGVhblZhbHVlDF9Eb3VibGVWYWx1ZQABAAAACA0BBgIAAAAoalpVBgYAAAAQMCwxNTkxODcxMTg1OTY5Nag1HJdvMc6IAQAAAAAAAFBAAQUAAAAEAAAAKGpaVQYHAAAAEDAsMTU5MTg3MTE4NTk2OTWoNRyXbzHOiAEAAAAAAABQQAs=

Я ничего не понял что тут засериализовано, а ВЫ?

Page 54: 04 net saturday eugene sukhikh ''the basic performance questions''

Что мы выбрали

NetDataCintractSerializer

Page 56: 04 net saturday eugene sukhikh ''the basic performance questions''

Чего собственно я хочу от Вас!!!

• Наступать на грабли приятно, но не выгодно – давайте создадим карту граблей

• Если грабли хаотически прыгают по этой карте – давайте научимся их отлавливать в конкретный момент времени

• Давайте грабли поставим в сарай!!!

Page 57: 04 net saturday eugene sukhikh ''the basic performance questions''

А что дальше

Давайте встречаться и обсуждать: - практические аспекты- теоретические подходы - методики из реальной жизни- алгоритмы в рутинной деятельности- да все что угодно – ЭТО НАС РАЗВИВАЕТ

Page 58: 04 net saturday eugene sukhikh ''the basic performance questions''

Класс и структура

• Давай обсудим?!

Page 59: 04 net saturday eugene sukhikh ''the basic performance questions''

Спасибо

• Спасибо что пришли• Спасибо Анне Тупиковой за настойчивость• Спасибо Татьяне Аксеновой за научную

критику• Спасибо Александру Сухому за полезные

советы• Спасибо всему коллективу за потраченное

время• Окрема подяка за підтримку МегаМозку

Page 60: 04 net saturday eugene sukhikh ''the basic performance questions''

ВСЕ!