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

04 net saturday eugene sukhikh ''the basic performance questions

Embed Size (px)

Citation preview

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

ВСЕ!