Формат блога - записки на салфетке... , важные и не очень мелочи которые легко забыть
Обо мне
Метки
- C#
- заметки на полях
- многопоточность
- notes for memory
- DevExpress
- XtraGrid
- async
- await
- multithreading
- parallel programming
- Отладка
- асинхронный ввод-вывод
- внутреннее устройство Windows
- Columns
- WinForms
- архитектура приложения
- обучение
- BlockingCollection
- Entity Framework
- ExecutionContext
- IIS
- Lazy
- Lazy loading
- Leading columns
- Npgsql
- OutOfMemory Exception
- PostgreSQL.
- RegExp
- SOLID
- Solution Explorer
- SynchronizationContext
- ThreadPool
- Tuple
- VS2013
- VS2013 bug
- Visual Studio
- WPF
- boxing
- context menu
- debuger
- filter
- patterns
- reference types
- unboxing
- value types
- базы данных
- контекстное меню
- кортежи
- математика
- распаковка
- физика
среда, 21 сентября 2016 г.
пятница, 9 сентября 2016 г.
RegExp для повседневной жизни
- Номер кредитки:
- ICQ:
- Набор из букв и цифр (латиница):
- Набор из букв и цифр (латиница + кириллица):
- Домен (например abcd.com):
- IPv4:
- IPv6:
- Имя пользователя (с ограничением 2-20 символов, которыми могут быть буквы и цифры, первый символ обязательно буква):
- Пароль (Строчные и прописные латинские буквы, цифры):
- Пароль (Строчные и прописные латинские буквы, цифры, спецсимволы. Минимум 8 символов):
- Дата в формате YYYY-MM-DD:
UPD. Более строгая проверка:
(19|20)\d\d-((0[1-9]|1[012])-(0[1-9]|[12]\d)|(0[13-9]|1[012])-30|(0[13578]|1[02])-31)
- Дата в формате DD/MM/YYYY:
- Целые числа и числа с плавающей точкой (разделитель точка):
- UUID:
- Широта или долгота:
- E-mail :
- URL на латинице. Если нужно распознавать и кириллические домены, необходимо изменить все «a-z0-9» на «а-яёa-z0-9» и добавить в список доменных зон «рф»:
- Время в формате HH:MM:SS:
- Mac-адрес :
понедельник, 5 сентября 2016 г.
вторник, 12 июля 2016 г.
воскресенье, 10 июля 2016 г.
SOLID - Single(единственность ответственности) Open-closed(открытости-закрытости) Lisk(замещение Лисков) Interface segregation(разделения интерфейса) Dependency inversion
- Принцип единственности ответственности (The Single Responsibility Principle)
- Принцип открытости/закрытости (The Open Closed Principle)
- Принцип замещения Лисков (The Liskov Substitution Principle)
- Принцип разделения интерфейса (The Interface Segregation Principle)
- Принцип инверсии зависимости (The Dependency Inversion Principle)
пятница, 10 июня 2016 г.
Немасштабируемый вэб сервер IIS - откуда он берется ?
Плохая архитектура
Представим себе что мы написали ASP.NET или WCF приложение без использования асинхронных операций - что произойдет ?
При попытке коннекта от клиента IIS создаст в ThreadPool новый поток, который создаст запрос к базе данных и ЗАБЛОКИРУЕТСЯ ожидая ответа ! В случае с высокой загрузкой сервера, когда блокировки будут возникать быстрее чем база данных отдавать ответы разблокируя поток - число заблокированных потоков будет расти.
Но что самое главное - у этого роста есть четкий предел: -лишь определенное количество потоков поток ThreadPool сможет создать, и наступит момент когда система выдаст OutOfMemory Exception ! И данное исключение не может быть обработано - так как исключение возникает в самом ThreadPool и наш код в этот момент находиться в стеке.
То есть что произойдет - процесс сервера будет уничтожен (TerminateProcess) вместе со всеми потоками, но как только первый же клиент создаст запрос - процесс создастся вновь автоматически, и все опять пойдет по кругу !
Возникает "магия" - вдруг ни с того ни с сего клиенты не получают ответов (периодически), но потом все работает как обычно ...
Ярлыки:
архитектура приложения
,
асинхронный ввод-вывод
,
многопоточность
,
async
,
await
,
C#
,
IIS
,
multithreading
,
OutOfMemory Exception
,
ThreadPool
суббота, 4 июня 2016 г.
Контексты исполнения (ExecutionContext) и синхронизации (SynchronizationContext) - что это такое и с чем их едят ?
Контекст исполнения (ExecutionContext)
Если коротко - это некие "внешние данные", причем они подобны воздуху - мы его не замечаем пока его используем, но его отсутствие смерти подобно ! Обычно это данные по правам и доступам (Principal), данные аутентификации и т.д. и т.п. Сам же ExecutionContext - это просто контейнер для данных.
Причина его появления понятна и ясна - если в синхронном мире у нас есть только один поток и данные не изменны , то в асинхронном нам надо знать а где мы вообще в данный момент времени .
Подписаться на:
Сообщения
(
Atom
)






