Ответ 1
В дополнение к MSDN Best Practices, я добавлю:
- Не создавайте свои собственные потоки. Предпочитаете использовать ThreadPool (или новую параллельную библиотеку задач Задачи). Управление собственной нитью редко, если вообще когда-либо, правильное дизайнерское решение.
- Будьте осторожны с проблемами, связанными с пользовательским интерфейсом. Control.Invoke (Windows Forms) и Dispatcher.Invoke ( WPF) или используйте SynchronizationContext. Текущий с Post/Send
- При необходимости используйте BackgroundWorker class.
- Попробуйте сохранить синхронизацию через блокировки до минимума
- Обязательно синхронизировать все, что требует синхронизации.
- Вы можете использовать методы заблокированный класс, если это возможно, при блокировке
Как только вы перейдете на более продвинутый уровень, и пытаетесь оптимизировать, другие вещи, которые нужно искать:
- Остерегайтесь ложного обмена. Это особенно проблематично при работе с массивами, так как каждый массив записывает в любой элемент массива, включает проверку границ в .NET, что фактически вызывает доступ к массиву около элемента 0 (непосредственно перед элементом 0 в памяти). Это может вызвать перфекционизм. резко спуститься вниз.
- Остерегайтесь проблем с закрытием, особенно при работе в циклах. Ошибки могут возникать, если вы закрываете переменную в неправильной области при создании делегата.