Принципи оптимизации C# программы

На что нужно обращать внимание, если нужно оптимизировать проект? Программа очень большая, глаза разбегаются, а ускорить нужно... Может, есть какие-то моменты, на которые в первую очередь нужно обращать внимание?

1. Для того что бы оптимизировать программу прежде всего обратите внимание на алгоритм выполнения этой программы.

2. Постарайтесь убрать всё лишнее в методах. Даже если это кажется совсем незначительным и замедляет работу на 1 микросекунду, то за 100 миллионов вызовов вы выиграете уже полторы минуты.

3. Уберите все разветления кода (условные операторы), которые не используются или сделаны "на дурака". Использоваться они всё равно не будут, но времени на себя забирают прилично.

4. Постарайтесь избежать циклы foreach. То, что он используется только классом, реализуемым интерфейсом IEnumerable означает, что эта конструкция может создать экземпляр класса, который будет реализовывать этот интерфейс.

5. Если у вас есть циклы, которые могут завершиться досрочно (например цикл в методе поиска элемента) - разрывайте их сразу же как только они выполнили свою функцию. Например, если у вас есть массив с миллионом элементов, а найти вам нужно только один, то в случае если этот ваш элемент находится под первым индексом, остальной перебор массива будет абсолютно не нужным. Время будет потрачено зря.

6. Если это возможно, используйте "ленивую инициализацию". В случае если данных очень много, а отобразить нужно , например, только одну страничку, то программа и прогрузит вам только одну страничку, а не сразу все данные. При переходе на другую страничку, а после - возврате на предыдущую, ваши данные также будут подгружены мгновенно, а не будут загружаться на странице снова, как в первый раз.

7. Если это возможно, постарайтесь заменить свои классы структурами. Структуры занимают намного меньше места в пямяти, хранятся в стеке и , из-за этого, не требуют сборщику мусора тратить на них своё время.

8. Используйте указатели. Правда для этого придётся лезть в "unsafe" код, но зато использование указателей даст вам большое преимущество в скорости, вы сможете оперировать объектами в памяти напрямую, а не создавать их копии и очищать ненужные сборщиком мусора.