Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ontico
Современные процессоры имеют на борту по нескольку вычислительных ядер, позволяющих запускать задачи на них параллельно. И, казалось бы, вот оно — счастье: бей большие задачи на куски, запускай эти куски параллельно на разных ядрах и радуйся.
Но не все так просто. Для того чтобы одновременный доступ к общим данным выполнялся корректно, современные системы используют разные примитивы синхронизации. В основе одних лежат блокировки (locks), в основе других — операции типа сравнение-с-обменом (compare-and-swap). Однако и у тех и у других есть свои слабые места. О них мы и поговорим.
Из доклада вы узнаете, чем блокирующие алгоритмы отличаются от неблокирующих, и какими достоинствами и недостатками обладает каждый из этих классов. Кроме того, будут показаны различные подводные камни тех и других решений: Deadlock, Livelock, Starvation, Mutable vs Immutable hype.
Multithreading in java past and actualYevgen Levik
In this talk I’d like to give you an overview of java.util.concurrent package and represent useful Java concurrency tools. I’ll cover the core functionality and the state-of-the-art API (Executors, Accumulators, StampedLock etc).
Simple examples in github (https://github.com/levik666/OverviewInJavaUtilConcurrent)
Лекция для сотрудников фирмы Soft-logic, проведенная 25.12.2014. В ходе лекции рассматривались следующие ключевые моменты:
1. Постановка проблемы. Паттерн пул потоков
- Проблема производительности
- Описание паттерна в общем виде
- Основные два подхода к запуску задач
- Три стратегии организации пулов потоков
2. Интерфейсы и классы взаимодействия с пулами потоков
- Интерфейсы ExecutorService, ScheduledExecutorService
- Реализации ThreadPoolExecutor, ScheduledThreadPoolExecutor
- Интерфейсы Runnable, Callable<v>,Future<v>, RunnableFuture<v>
3. Фабрика пулов Executors
- CachedThreadPool
- SingleThreadExecutor
- FixedThreadPool
- ThreadScheduledExecutor
- WorkStealingPool
4. Классы задач
- ForkJoinTask, RecursiveTask, RecursiveAction
- CompletableFuture<v>
5. ForkJoinPool
- Особенности производительности
- Общий пул ява машины
JavaScript, который мы пишем, не всегда исполняется, как мы думаем. Виртуальные машины, исполняющие его, делают многое, чтобы он работал быстрее. Но они не всесильны, и чтобы сделать код действительно быстрым, нужно знать их особенности и как все работает под капотом.
Поговорим об этих особенностях, что может служить причиной потери производительности, как это диагностировать и как делать код действительно быстрым. Доклад базируется на опыте, полученном в ходе работы над такими проектами как basis.js (весьма быстрый фреймворк для SPA), CSSO (минификатор CSS, который из медленного стал один из самых быстрых), CSSTree (самый быстрый детальный CSS парсер) и других.
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ontico
Современные процессоры имеют на борту по нескольку вычислительных ядер, позволяющих запускать задачи на них параллельно. И, казалось бы, вот оно — счастье: бей большие задачи на куски, запускай эти куски параллельно на разных ядрах и радуйся.
Но не все так просто. Для того чтобы одновременный доступ к общим данным выполнялся корректно, современные системы используют разные примитивы синхронизации. В основе одних лежат блокировки (locks), в основе других — операции типа сравнение-с-обменом (compare-and-swap). Однако и у тех и у других есть свои слабые места. О них мы и поговорим.
Из доклада вы узнаете, чем блокирующие алгоритмы отличаются от неблокирующих, и какими достоинствами и недостатками обладает каждый из этих классов. Кроме того, будут показаны различные подводные камни тех и других решений: Deadlock, Livelock, Starvation, Mutable vs Immutable hype.
Multithreading in java past and actualYevgen Levik
In this talk I’d like to give you an overview of java.util.concurrent package and represent useful Java concurrency tools. I’ll cover the core functionality and the state-of-the-art API (Executors, Accumulators, StampedLock etc).
Simple examples in github (https://github.com/levik666/OverviewInJavaUtilConcurrent)
Лекция для сотрудников фирмы Soft-logic, проведенная 25.12.2014. В ходе лекции рассматривались следующие ключевые моменты:
1. Постановка проблемы. Паттерн пул потоков
- Проблема производительности
- Описание паттерна в общем виде
- Основные два подхода к запуску задач
- Три стратегии организации пулов потоков
2. Интерфейсы и классы взаимодействия с пулами потоков
- Интерфейсы ExecutorService, ScheduledExecutorService
- Реализации ThreadPoolExecutor, ScheduledThreadPoolExecutor
- Интерфейсы Runnable, Callable<v>,Future<v>, RunnableFuture<v>
3. Фабрика пулов Executors
- CachedThreadPool
- SingleThreadExecutor
- FixedThreadPool
- ThreadScheduledExecutor
- WorkStealingPool
4. Классы задач
- ForkJoinTask, RecursiveTask, RecursiveAction
- CompletableFuture<v>
5. ForkJoinPool
- Особенности производительности
- Общий пул ява машины
JavaScript, который мы пишем, не всегда исполняется, как мы думаем. Виртуальные машины, исполняющие его, делают многое, чтобы он работал быстрее. Но они не всесильны, и чтобы сделать код действительно быстрым, нужно знать их особенности и как все работает под капотом.
Поговорим об этих особенностях, что может служить причиной потери производительности, как это диагностировать и как делать код действительно быстрым. Доклад базируется на опыте, полученном в ходе работы над такими проектами как basis.js (весьма быстрый фреймворк для SPA), CSSO (минификатор CSS, который из медленного стал один из самых быстрых), CSSTree (самый быстрый детальный CSS парсер) и других.
Причины потерь процессорного времени при организации последовательности вычислений внутри потока: 1. Ожидание ответа на запрос (поток спит). 2. Выполнение дополнительных "лишних" действий. Как способ устранения этих потерь - паттерн Пул потоков. Анализ императивного и функционального подхода к борьбе с "жадными" операциями. Эволюция методов организации параллельных вычислений на основе пула потоков.
В стандартной библиотеке <algorithm> есть много очень полезных для повседневной работы алгоритмов, и с каждым новым стандартом их количество увеличивается. Но всегда чего-то не хватает. Мы поговорим, как тут может помочь Boost.Algorithm, что есть полезного в этой замечательной библиотеке и немного окунёмся в процесс разработки библиотеки в Boost.
В третьей главе рассматриваются базовые свойства акторов, описанные в PhD диссертации Gul Agha: каждый актор имеет адрес, большой почтовый ящик, куда доставляются сообщения, адресованные актору и поведение. В ответ на входящее сообщение актор может отправить конечный набор сообщений другим акторам и/или создать конечное число новых акторов и/или поменять свое поведение для обработки следующего сообщения.
В рамках данного курса будет разработана библиотека для разработки параллельных приложений на платформе .NET, построенная по модели акторов.
Исходные коды библиотеки будут выкладываться на GitHub: https://github.com/hwdtech/HWdTech.DS
Код библиотеки будет разработан с использованием следующих принципов, приемов и методик:
S.O.L.I.D. - принципы
Unit-tests
Mock
IoC контейнеры
Для удобства слушателей курса краткий обзор данных практик приведен в Главе 4.
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...Ontico
Что нужно хранить для того, чтобы была возможность ответить на этот вопрос?
Для точного ответа нужно через равные интервалы времени сохранять множество посетителей сайта (пусть это для простоты будут IP-адреса), которых мы за прошедший интервал увидели. Понятное дело, что такой объём информации хранить нереально, а даже, если получится, придётся объединять большое количество множеств и считать элементы в том множестве, которое получилось в итоге. Это очень долго. Не спасает ситуацию даже переход от точных алгоритмов к приблизительным: гарантировать точность либо не получится, либо придётся использовать объём памяти и вычислительные ресурсы, сопоставимые с точным алгоритмом.
В 80-х годах появились первые вероятностные алгоритмы для приблизительной оценки количества элементов в множестве. При большом количестве уникальных элементов эти алгоритмы дают приблизительную оценку, которая отличается от истинного значения в (1±e), e<1>0.5. То есть они могут вернуть оценку, которая сильно отличается от истинного значения с некоторой вероятностью (1-p). Чем больше требуется точность, и чем меньше нужна вероятность ошибки, тем больше ресурсов требуют алгоритмы. Сохраняя внутреннее состояние одного из таких алгоритмов через равные промежутки времени в базе данных, мы можем оценить приблизительное количество уникальных посетителей не только за произвольный интервал времени, но и за произвольное объединение любых интервалов времени, например, мы можем посчитать общее количество уникальных IP, которых мы наблюдали в промежутке времени с 17:00 до 18:00 в течение последней недели.
В 2000-ные в научном сообществе велась активная работа по достижению теоретически оптимальных характеристик (т.е. потребление памяти, сложность добавления нового элемента, сложность запроса) вероятностных приблизительных алгоритмов для оценки кардинальности (количества элементов в множестве), разрабатывался необходимый инструментарий.
Первый такой алгоритм был предложен в 2010 году. О нём-то мы и поговорим.
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...Ontico
Довольно часто как адинистраторы, так и разработчики жалуются на низкую производительность приложений, работающих с базой данных, и нередко при этом ищут решения возникших проблем с помощью различных настроек как СУБД, так и операционной системы, пренебрегая при этом самым действенным способом - оптимизацией запросов к собственно БД.
Тому, как понимать, где же узкие места, и как их можно попробовать избежать на примере PostgreSQL и посвящен этот доклад.
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETDev2Dev
Работа с данными - это ключевая функция большинства приложений. Но работать с данными не так просто как кажется. С одной стороны, нам нужна производительность, с другой все best practices диктуют нам принцип persistence ignorance, с третьей еще и хочется писать красивый и понятный код. Как найти баланс между всем этим? Чем хороший IRepository отличается от плохого? Что такое CQRS и причем тут функциональное программирование? Об этом и пойдет речь, а так же немного граблей и личного опыта.
Экстремальная оптимизация производительности на примере MongoDB Java DriverVitebsk DSC
При работе с базами данных мы часто сталкиваемся с тем, что ORM фреймворки, принося нам удобство и гибкость, требуют непомерную плату – серьезное падение производительности. Казалось бы, чтобы решить эту проблему, достаточно просто отказаться от ORM и использовать низкоуровневый API. Но иногда и этого бывает недостаточно…
Презентация подготовлена по материалам выступления Евгения Берлога на витебской конференции “Developer's Software Conference” (31.10.2015). Запись выступления: https://events.epam.com/events/dsc2015/talks/104.
Евгений Зуев, С++ в России: Стандарт языка и его реализацияPlatonov Sergey
Доклад посвящён различным аспектам компилятора С++, созданного с участием автора. В выступлении рассказывается о продвинутой архитектуре компилятора, основных проектных решениях, а также обсуждаются особенности входного языка, повлиявшие на реализацию компилятора.
Disciplina fiscale degli incentivi sul fotovoltaico 2011EnergymasterIt
La presentazione mira ad una trattazione approfondita della disciplina fiscale 2011 degli incentivi sul fotovoltaico.
Nello specifico:
Tariffa incentivante,
Scambio sul posto,
Vendita di energia (Ritiro dedicato),
sulla base:
del “responsabile dell’impianto” (P.F., E.n.c., Imprese comm.li, Imprese agricole, Lavoratori autonomi)
della tipologia dell’impianto (potenza < di 20 Kw, compresa tra 20 e 200 Kw, > di 200 Kw)
della collocazione dell’impianto (in abitazione/sede del responsabile o altrove – “impianti diversi”)
Причины потерь процессорного времени при организации последовательности вычислений внутри потока: 1. Ожидание ответа на запрос (поток спит). 2. Выполнение дополнительных "лишних" действий. Как способ устранения этих потерь - паттерн Пул потоков. Анализ императивного и функционального подхода к борьбе с "жадными" операциями. Эволюция методов организации параллельных вычислений на основе пула потоков.
В стандартной библиотеке <algorithm> есть много очень полезных для повседневной работы алгоритмов, и с каждым новым стандартом их количество увеличивается. Но всегда чего-то не хватает. Мы поговорим, как тут может помочь Boost.Algorithm, что есть полезного в этой замечательной библиотеке и немного окунёмся в процесс разработки библиотеки в Boost.
В третьей главе рассматриваются базовые свойства акторов, описанные в PhD диссертации Gul Agha: каждый актор имеет адрес, большой почтовый ящик, куда доставляются сообщения, адресованные актору и поведение. В ответ на входящее сообщение актор может отправить конечный набор сообщений другим акторам и/или создать конечное число новых акторов и/или поменять свое поведение для обработки следующего сообщения.
В рамках данного курса будет разработана библиотека для разработки параллельных приложений на платформе .NET, построенная по модели акторов.
Исходные коды библиотеки будут выкладываться на GitHub: https://github.com/hwdtech/HWdTech.DS
Код библиотеки будет разработан с использованием следующих принципов, приемов и методик:
S.O.L.I.D. - принципы
Unit-tests
Mock
IoC контейнеры
Для удобства слушателей курса краткий обзор данных практик приведен в Главе 4.
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...Ontico
Что нужно хранить для того, чтобы была возможность ответить на этот вопрос?
Для точного ответа нужно через равные интервалы времени сохранять множество посетителей сайта (пусть это для простоты будут IP-адреса), которых мы за прошедший интервал увидели. Понятное дело, что такой объём информации хранить нереально, а даже, если получится, придётся объединять большое количество множеств и считать элементы в том множестве, которое получилось в итоге. Это очень долго. Не спасает ситуацию даже переход от точных алгоритмов к приблизительным: гарантировать точность либо не получится, либо придётся использовать объём памяти и вычислительные ресурсы, сопоставимые с точным алгоритмом.
В 80-х годах появились первые вероятностные алгоритмы для приблизительной оценки количества элементов в множестве. При большом количестве уникальных элементов эти алгоритмы дают приблизительную оценку, которая отличается от истинного значения в (1±e), e<1>0.5. То есть они могут вернуть оценку, которая сильно отличается от истинного значения с некоторой вероятностью (1-p). Чем больше требуется точность, и чем меньше нужна вероятность ошибки, тем больше ресурсов требуют алгоритмы. Сохраняя внутреннее состояние одного из таких алгоритмов через равные промежутки времени в базе данных, мы можем оценить приблизительное количество уникальных посетителей не только за произвольный интервал времени, но и за произвольное объединение любых интервалов времени, например, мы можем посчитать общее количество уникальных IP, которых мы наблюдали в промежутке времени с 17:00 до 18:00 в течение последней недели.
В 2000-ные в научном сообществе велась активная работа по достижению теоретически оптимальных характеристик (т.е. потребление памяти, сложность добавления нового элемента, сложность запроса) вероятностных приблизительных алгоритмов для оценки кардинальности (количества элементов в множестве), разрабатывался необходимый инструментарий.
Первый такой алгоритм был предложен в 2010 году. О нём-то мы и поговорим.
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...Ontico
Довольно часто как адинистраторы, так и разработчики жалуются на низкую производительность приложений, работающих с базой данных, и нередко при этом ищут решения возникших проблем с помощью различных настроек как СУБД, так и операционной системы, пренебрегая при этом самым действенным способом - оптимизацией запросов к собственно БД.
Тому, как понимать, где же узкие места, и как их можно попробовать избежать на примере PostgreSQL и посвящен этот доклад.
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETDev2Dev
Работа с данными - это ключевая функция большинства приложений. Но работать с данными не так просто как кажется. С одной стороны, нам нужна производительность, с другой все best practices диктуют нам принцип persistence ignorance, с третьей еще и хочется писать красивый и понятный код. Как найти баланс между всем этим? Чем хороший IRepository отличается от плохого? Что такое CQRS и причем тут функциональное программирование? Об этом и пойдет речь, а так же немного граблей и личного опыта.
Экстремальная оптимизация производительности на примере MongoDB Java DriverVitebsk DSC
При работе с базами данных мы часто сталкиваемся с тем, что ORM фреймворки, принося нам удобство и гибкость, требуют непомерную плату – серьезное падение производительности. Казалось бы, чтобы решить эту проблему, достаточно просто отказаться от ORM и использовать низкоуровневый API. Но иногда и этого бывает недостаточно…
Презентация подготовлена по материалам выступления Евгения Берлога на витебской конференции “Developer's Software Conference” (31.10.2015). Запись выступления: https://events.epam.com/events/dsc2015/talks/104.
Евгений Зуев, С++ в России: Стандарт языка и его реализацияPlatonov Sergey
Доклад посвящён различным аспектам компилятора С++, созданного с участием автора. В выступлении рассказывается о продвинутой архитектуре компилятора, основных проектных решениях, а также обсуждаются особенности входного языка, повлиявшие на реализацию компилятора.
Disciplina fiscale degli incentivi sul fotovoltaico 2011EnergymasterIt
La presentazione mira ad una trattazione approfondita della disciplina fiscale 2011 degli incentivi sul fotovoltaico.
Nello specifico:
Tariffa incentivante,
Scambio sul posto,
Vendita di energia (Ritiro dedicato),
sulla base:
del “responsabile dell’impianto” (P.F., E.n.c., Imprese comm.li, Imprese agricole, Lavoratori autonomi)
della tipologia dell’impianto (potenza < di 20 Kw, compresa tra 20 e 200 Kw, > di 200 Kw)
della collocazione dell’impianto (in abitazione/sede del responsabile o altrove – “impianti diversi”)
Methods for building dialog agents and the technologies we used Grid Dynamics
Chatbots have now become an integral part of software development, which are closely related to both NLP and ML. The present report highlights the basic concepts and approaches of working with NLP by implementing dialogue agents (Intent classification, NER, Slot Filing), and you can also find out how to build an entire dialog system. No SaaS, only in-house solutions!
Дмитрий Прокофьев: Эволюция системы синхронизации данных между сервисамиit-people
В докладе будет рассказано о том, зачем Яндексу понадобилась синхронизация данных и с чем пришлось столкнуться в процессе: Почему синхронизируем на уровне приложения. Update log против Insert log. Проблемы связанные с DB. Типы данных, отсутствие транзакций. Проблемы связанные с Django. Проблемы связанные c изменениями ниже уровня приложения. Например массовый update.
Не бойся, это всего лишь данные... просто их многоRoman Dvornov
За последние 15 лет веб сильно изменился и ускорился. Но большинство по-прежнему боится большого количества данных и сложной логики на клиенте. Потому что "тормозит".
Я хочу сломать стереотипы и показать, как начать делать крутые штуки на client-side. Тысячи и сотни тысяч объектов, разные типы, зависимые вычисляемые свойства, агрегация, множество вариантов отображения. Все это в вашем браузере. Без тормозов, регистраций, смс.
Видео этого доклада на конференции DUMP, Екатеринбург, 14 марта 2014: https://vimeo.com/90836493
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...Ontico
РИТ++ 2017, Backend Conf
Зал Кейптаун, 6 июня, 15:00
Тезисы:
http://backendconf.ru/2017/abstracts/2710.html
В данном докладе я дам обзор системных интерфейсов, которые предоставляет Linux для эффективной обработки запросов. В частности, речь пойдет о мультиплексировании ввода-вывода, отправке файлов и многопоточной обработке входящих соединений. Расскажу о нюансах и недостатках в сравнении с аналогичными интерфейсами других unix-подобных операционных систем. Личный опыт показывает, что продуманность и качество реализации интерфейса для прикладных программ — это, к сожалению, довольно слабая сторона ядра Linux.
- Как начать развивать систему аналитики в компании, не имея армию data-инженеров.
- Как перейти из состояния «я не понимаю какие квадратики на этой схеме нужны для моих задач» и при этом не уйти в R&D на несколько месяцев.
- Как реализовать потоковую обработку данных на PHP (~40К записей в минуту).
- Какие технические решения применяли в нашем решении и какие факторы учитывали в принятии решений.
Презентация с мероприятия https://habr.com/ru/company/tuturu/blog/426059/
21 октября состоялась 1 встреча одесского сообщества Python-разработчиков - Python Meetup.
Поговорили о новых технологиях, диалектах и инструментарии для создания графических интерфейсов.
Докладчики:
Александр Степанов (Python Team Lead at SteelKiwi Inc.)
Тема: Шаблон проекта. Использование Vagrant, VirtualEnv и Ansible provisioner. Зачем это необходимо?
Евгений Гетманский (Рython team lead at SteelKiwi Inc.)
Тема: Оптимизация работы веб сервера с базой данных на примере Django.
Similar to 04 net saturday eugene sukhikh ''the basic performance questions'' (20)
2. Повестка дня О себе Цель доклада Поставленные вопросы Доклад по циклам Доклад по методам сериализации Выводы Вопросы
3. Сухих Евгений Иванович ПроектIntraNote,продуктDocuNote Workflowdeveloper Любитель поговорить и послушать О себе
4. Tips to boost .NET Performance (Цели) Поделиться опытом
5. Вопросы В нашем проекте довольно таки часто приходится иметь дело с массивами элементов (передача их с сервера на клиент и обратно, прохождение по массиву/коллекции). В связи с этим возникли вопросы выбора оптимального: Циклического оператора Механизма сериализации Много других вопросов…
7. Единица измерения скорости Я бы выбрал миллисекунды, но и их слишком много В качестве временной шкалы выбраны тики Только не спрашивайте что такое тики – я не знаю…
16. FOREACH vartmp = obj.GetEnumerator();int i;while(tmp.MoveNext()) { i = tmp.Current; {...} // your code}
17. Время работы с малыми массивами Базовыми было решено использовать массивы небольшого размера. 20 записей 50 записей 100 записей Ну и для сравнения массивы побольше: 10 000 100 000
18. Примечательно Первое обращение для всех циклов существенно дольше последующих. ПОЧЕМУ? Время выполнения операции в тиках Размер массива
19. Ответы Я думаю что это из-за первой компиляции класса?! А что думаете Вы?
20. Скорость перебора массива Integer на малых размерах Время выполнения операции в тиках ПОЧЕМУ? Размер массива
21. Что видно сгистограммы: ForEachи For циклы работают явно быстрее. Возможно это связано с типом перебираемых данных. Давайте возьмем другие типы данных.
22. String () Время выполнения операции в тиках Размер массива Выполняется в целом дольше. Почему?
23. Double () Перебор 50-ти элементов длится дольше чем 100 Время выполнения операции в тиках Размер массива Мистика !!!
24. Date () Время выполнения операции в тиках Размер массива
28. «For»и «ForEach» быстреечем «Do»и «While» Это не открытие Америки, это наглядный материал для тех, кто как и я, не любит читать!!! Возникает два вопроса: Почему«Do»и «While» медленные «For»или «ForEach»
29. While Влияют ли по разному записанные условия на результат <, <=, >, >= = Давайте попробуем
30. While c разными операторами Время выполнения операции в тиках ответ: НЕТ!!! Размер массива
40. Вывод Для перебора элементов небольших массивов целесообразнее использовать ForEach Для просмотра больших массивов – For Вышеприведенные данные верны только для моей тестовой машины
41. Определение Сериализация (в программировании) — процесс перевода какой-либо структуры данных в последовательность битов. Обратной к операции сериализации является операция десериализации — восстановление начального состояния структуры данных из битовой последовательности. (с) Википедия
42. Критерии Размер данных Время сериализации/десериализации Читабельность Совместимость версий
56. Размер в килобайтах Кб Но что же происходит с увеличением количества элементов в массиве? НИЧЕГО! Количество элементов в листе
57. LosFormatterвыигрывает и по скорости и по времени Вот такой вид имеют сериализованные данные: /wEyigQAAQAAAP////8BAAAAAAAAAAwCAAAAQVRlc3QgbG9vcHMsIFZlcnNpb249MS4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBQEAAAAYdGVzdF9sb29wcy5DMS5Db2xsZWN0aW9uBQAAAAxfRGVzY3JpcHRpb24GT3ZlcmxvDUxpc3RgMStfaXRlbXMMTGlzdGAxK19zaXplD0xpc3RgMStfdmVyc2lvbgECBAAAHnRlc3RfbG9vcHMuQzEuQ29sbGVjdGlvbkl0ZW1bXQIAAAAICAIAAAAKCgkDAAAAAgAAAAIAAAAHAwAAAAABAAAABAAAAAQcdGVzdF9sb29wcy5DMS5Db2xsZWN0aW9uSXRlbQIAAAAJBAAAAAkFAAAADQIFBAAAABx0ZXN0X2xvb3BzLkMxLkNvbGxlY3Rpb25JdGVtBQAAAA1fSW50ZWdlclZhbHVlDF9TdHJpbmdWYWx1ZQ5fRGF0ZVRpbWVWYWx1ZQ1fQm9vbGVhblZhbHVlDF9Eb3VibGVWYWx1ZQABAAAACA0BBgIAAAAoalpVBgYAAAAQMCwxNTkxODcxMTg1OTY5Nag1HJdvMc6IAQAAAAAAAFBAAQUAAAAEAAAAKGpaVQYHAAAAEDAsMTU5MTg3MTE4NTk2OTWoNRyXbzHOiAEAAAAAAABQQAs= Я ничего не понял что тут засериализовано, а ВЫ?
59. Sources Learn C# Programming Tutorial Lesson 4 – Loops How do foreach loops work in C#? Сериализация в .NET. Выпрямляем своими руками BinaryFormatteralternatives BinaryFormatter Class Binary & XML http://stackoverflow.com/questions/365615/in-net-which-loop-runs-faster-for-or-foreach
60. Чегособственно я хочу от Вас!!! Наступать на грабли приятно, но не выгодно – давайте создадим карту граблей Если грабли хаотически прыгают по этой карте – давайте научимся их отлавливать в конкретный момент времени Давайте грабли поставим в сарай!!!
66. Спасибо Спасибо что пришли Спасибо Анне Тупиковой за настойчивость Спасибо Татьяне Аксеновой за научную критику Спасибо Александру Сухому за полезные советы Спасибо всему коллективу за потраченное время Окрема подяка за підтримку МегаМозку