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

483 views

Published on

Published in: Design
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
483
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Кто здесь?<br />А главное зачем?<br />
  2. 2. Повестка дня<br />О себе<br />Цель доклада<br />Поставленные вопросы<br />Доклад по циклам<br />Доклад по методам сериализации<br />Выводы<br />Вопросы<br />
  3. 3. Сухих Евгений Иванович<br />ПроектIntraNote,продуктDocuNote<br />Workflowdeveloper<br />Любитель поговорить и послушать<br />О себе<br />
  4. 4. Tips to boost .NET Performance (Цели)<br />Поделиться опытом<br />
  5. 5. Вопросы<br />В нашем проекте довольно таки часто приходится иметь дело с массивами элементов (передача их с сервера на клиент и обратно, прохождение по массиву/коллекции). В связи с этим возникли вопросы выбора оптимального:<br />Циклического оператора<br />Механизма сериализации<br />Много других вопросов…<br />
  6. 6. I prefer number!!!<br />
  7. 7. Единица измерения скорости<br />Я бы выбрал миллисекунды, но и их слишком много<br />В качестве временной шкалы выбраны тики<br />Только не спрашивайте что такое тики – я не знаю…<br />
  8. 8. Приношу извинения за<br /> [Ctrl + c]<br /> [Ctrl + v]<br />
  9. 9. Циклы - шмиклы<br /><ul><li>for (int x = 1; x <= 5; x++) {… ;}
  10. 10. while (y <= 5){... y++;}
  11. 11. do {... y++;} while (y <= 5)
  12. 12. foreach (int i in array) {…}
  13. 13. Рекурсия?
  14. 14. Варианты?! …</li></li></ul><li>for (int x = 1; x <= 5; x++) {… ;}<br />
  15. 15. While /Do … while<br />
  16. 16. FOREACH<br />vartmp = obj.GetEnumerator();int i;while(tmp.MoveNext()) {    i = tmp.Current;    {...} // your code}<br />
  17. 17. Время работы с малыми массивами<br />Базовыми было решено использовать массивы небольшого размера.<br />20 записей<br />50 записей<br />100 записей<br />Ну и для сравнения массивы побольше:<br />10 000<br />100 000<br />
  18. 18. Примечательно<br />Первое обращение для всех циклов существенно дольше последующих. <br />ПОЧЕМУ?<br />Время выполнения операции в тиках<br />Размер массива<br />
  19. 19. Ответы<br />Я думаю что это из-за первой компиляции класса?!<br />А что думаете Вы?<br />
  20. 20. Скорость перебора массива Integer на малых размерах<br />Время выполнения операции в тиках<br />ПОЧЕМУ?<br />Размер массива<br />
  21. 21. Что видно сгистограммы:<br />ForEachи For циклы работают явно быстрее.<br />Возможно это связано с типом перебираемых данных.<br />Давайте возьмем другие типы данных.<br />
  22. 22. String ()<br />Время выполнения операции в тиках<br />Размер массива<br />Выполняется в целом дольше. Почему?<br />
  23. 23. Double ()<br />Перебор 50-ти элементов длится дольше чем 100<br />Время выполнения операции в тиках<br />Размер массива<br />Мистика !!!<br />
  24. 24. Date ()<br />Время выполнения операции в тиках<br />Размер массива<br />
  25. 25. CollectionItem ()<br />Время выполнения операции в тиках<br />Размер массива<br />
  26. 26. CollectionItem ()()<br />Время выполнения операции в тиках<br />Размер массива<br />Время в целом увеличилось<br />
  27. 27. CollectionItem ()() ()<br />Время выполнения операции в тиках<br />Размер массива<br />
  28. 28. «For»и «ForEach» быстреечем «Do»и «While»<br />Это не открытие Америки, это наглядный материал для тех, кто как и я, не любит читать!!!<br />Возникает два вопроса:<br />Почему«Do»и «While» медленные<br />«For»или «ForEach»<br />
  29. 29. While<br />Влияют ли по разному записанные условия на результат<br /><, <=, <br />>, >=<br />=<br />Давайте попробуем<br />
  30. 30. While c разными операторами<br />Время выполнения операции в тиках<br />ответ: НЕТ!!!<br />Размер массива<br />
  31. 31. «For»или «ForEach»на небольших массивах<br />Время выполнения операции в Тиках<br />Размер массива<br />
  32. 32. «For»или «ForEach»потеря лидерства<br />Время выполнения операции в Тиках<br />Размер массива<br />
  33. 33. «For»или «ForEach»на больших размерах<br />Время выполнения операции в Тиках<br />Размер массива<br />
  34. 34. Так это бы выглядело в миллисекундах<br />Время выполнения операции в Миллисекундах<br />Размер массива<br />
  35. 35. «For»или «ForEach»Кикбоксер 1<br />Время выполнения операции в Тиках<br />Размер массива<br />
  36. 36. «For»или «ForEach»Матрица часть 2<br />Время выполнения операции в Тиках<br />Размер массива<br />
  37. 37. «For»или «ForEach»Крепкий орешек 3<br />Время выполнения операции в Тиках<br />Размер массива<br />
  38. 38. «For»или «ForEach»Просто Мария<br />Время выполнения операции в Тиках<br />Размер массива<br />
  39. 39. «For»или «ForEach»Санта Барбара<br />Время выполнения операции в Тиках<br />Размер массива<br />
  40. 40. Вывод<br />Для перебора элементов небольших массивов целесообразнее использовать ForEach<br />Для просмотра больших массивов – For<br />Вышеприведенные данные верны только для моей тестовой машины<br />
  41. 41. Определение<br />Сериализация (в программировании) — процесс перевода какой-либо структуры данных в последовательность битов. Обратной к операции сериализации является операция десериализации — восстановление начального состояния структуры данных из битовой последовательности.<br />(с) Википедия<br />
  42. 42. Критерии<br />Размер данных<br />Время сериализации/десериализации<br />Читабельность<br />Совместимость версий<br />
  43. 43. Что пишут другие<br />
  44. 44. Разные сериализаторы<br />SoapFormatter<br />BinaryFormatter<br />XmlSerializer<br />DataContractSerializer<br />NetDataContractSerializer<br />LosFormatter<br />JsonDataContractSerializer<br />
  45. 45. SoapFormatter<br />Beginning with the .NET Framework version 3.5, this class is obsolete. Use BinaryFormatter instead.<br />Used for Net Remoting<br />
  46. 46. BinaryFormatter<br />
  47. 47. NetDataContractSerializer<br />
  48. 48. DataContractSerializer<br />
  49. 49. NetDataContractSerializer<br />
  50. 50. LosFormatter<br />
  51. 51. DataContractJsonSerializer<br />
  52. 52. Скорость<br />
  53. 53. Скорость в тиках<br />Гребанные тики<br />Количество элементов в листе<br />
  54. 54. Скорость в миллисекундах<br />Миллисекунды<br />Количество элементов в листе<br />
  55. 55. Размер в килобайтах<br />Кб<br />Количество элементов в листе<br />
  56. 56. Размер в килобайтах<br />Кб<br />Но что же происходит с увеличением количества элементов в массиве?<br />НИЧЕГО!<br />Количество элементов в листе<br />
  57. 57. LosFormatterвыигрывает и по скорости и по времени<br />Вот такой вид имеют сериализованные данные: /wEyigQAAQAAAP////8BAAAAAAAAAAwCAAAAQVRlc3QgbG9vcHMsIFZlcnNpb249MS4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBQEAAAAYdGVzdF9sb29wcy5DMS5Db2xsZWN0aW9uBQAAAAxfRGVzY3JpcHRpb24GT3ZlcmxvDUxpc3RgMStfaXRlbXMMTGlzdGAxK19zaXplD0xpc3RgMStfdmVyc2lvbgECBAAAHnRlc3RfbG9vcHMuQzEuQ29sbGVjdGlvbkl0ZW1bXQIAAAAICAIAAAAKCgkDAAAAAgAAAAIAAAAHAwAAAAABAAAABAAAAAQcdGVzdF9sb29wcy5DMS5Db2xsZWN0aW9uSXRlbQIAAAAJBAAAAAkFAAAADQIFBAAAABx0ZXN0X2xvb3BzLkMxLkNvbGxlY3Rpb25JdGVtBQAAAA1fSW50ZWdlclZhbHVlDF9TdHJpbmdWYWx1ZQ5fRGF0ZVRpbWVWYWx1ZQ1fQm9vbGVhblZhbHVlDF9Eb3VibGVWYWx1ZQABAAAACA0BBgIAAAAoalpVBgYAAAAQMCwxNTkxODcxMTg1OTY5Nag1HJdvMc6IAQAAAAAAAFBAAQUAAAAEAAAAKGpaVQYHAAAAEDAsMTU5MTg3MTE4NTk2OTWoNRyXbzHOiAEAAAAAAABQQAs=<br />Я ничего не понял что тут засериализовано, а ВЫ?<br />
  58. 58. Что мы выбрали<br />NetDataCintractSerializer<br />
  59. 59. Sources<br />Learn C# Programming Tutorial Lesson 4 – Loops<br />How do foreach loops work in C#?<br />Сериализация в .NET. Выпрямляем своими руками<br />BinaryFormatteralternatives<br />BinaryFormatter Class<br />Binary & XML<br />http://stackoverflow.com/questions/365615/in-net-which-loop-runs-faster-for-or-foreach<br />
  60. 60. Чегособственно я хочу от Вас!!!<br />Наступать на грабли приятно, но не выгодно – давайте создадим карту граблей<br />Если грабли хаотически прыгают по этой карте – давайте научимся их отлавливать в конкретный момент времени<br />Давайте грабли поставим в сарай!!!<br />
  61. 61. А что дальше<br />Давайте встречаться и обсуждать: <br /><ul><li>практические аспекты
  62. 62. теоретические подходы
  63. 63. методики из реальной жизни
  64. 64. алгоритмы в рутинной деятельности
  65. 65. да все что угодно – ЭТО НАС РАЗВИВАЕТ</li></li></ul><li>Класс и структура<br />Давай обсудим?!<br />
  66. 66. Спасибо<br />Спасибо что пришли<br />Спасибо Анне Тупиковой за настойчивость<br />Спасибо Татьяне Аксеновой за научную критику<br />Спасибо Александру Сухому за полезные советы<br />Спасибо всему коллективу за потраченное время<br />Окрема подяка за підтримку МегаМозку<br />
  67. 67. ВСЕ!<br />

×