Совет #1 Старайся писать небольшой и компактный код. Запомни: число строк и их длина прямо пропорциональны размеру скомпилированной программы. К тому же компактный код делает программы более шустрыми. У опытных программистов существует даже такая заповедь: "Нет такой программы, которую нельзя было бы уменьшить хотя бы на один оператор". Поэтому всегда внимательно смотри листинг своей программы, и ты обязательно обнаружишь места, которые можно написать короче или вообще убрать. Но это не касается комментариев, компилятор их все равно игнорирует, поэтому всегда вставляй комментарии, особенно в больших и сложных программах. Это поможет тебе легче в них ориентироваться. -------------------------------------------------------------------- Совет #2 Хорошенько изучи IDE (интегрированная среда разработчика) языка, на котором ты кодишь. Обычно в опциях IDE имеется возможность выбирать различные типы компиляторов, а по умолчанию всегда стоит самый простой, который быстро компилирует, но создает менее оптимизированный код. Поэтому всегда устанавливай самый оптимизирующий тип компилятора, и если ты не пишешь очередной Windows, то его медленная скорость будет для тебя не особо обременительна. В крайнем случае для черновых версий своих программ можешь использовать обычный тип компилятора, а для окончательного варианта - самый оптимизирующий. Кроме того, если имеется возможность, установи компилятор в режим "предупреждений о максимальном числе ситуаций" и исправляй свою программу до полного исчезновения сообщений. -------------------------------------------------------------- Совет #3 Используй вставки на ассемблере. Конечно, можно посоветовать полностью писать программы на асме, но надо признать, что сделать сейчас что-то более-менее крупное на нем не так-то просто и быстро, но возможность применить в своей программе вставку на ассемблере никогда не упускай. Это значительно повысит производительность программы и уменьшит ее требовательность к ресурсам компьютера. Тем более, практически все языки высокого уровня позволяют делать это. Кстати, всемирно известный в компьютерном мире Стив Гибсон, специалист по компьютерной безопасности, всегда писал и до сих пор пишет свои программы исключительно на ассемблере. Учи ассемблер! ------------------------------------------------------------------- Совет #4 Не выделывайся - делай стандартный и простой интерфейс в своих программах. Не нужно использовать модные сейчас окна нестандартной формы (овальные, треугольные и т.п.), необычные кнопки, оригинальные меню и т.п. Все это сильно тормозит программу, расходует огромное количество ресурсов компьютера и требует дополнительного времени на разработку. Тем более, профессионалов этим не удивишь, а простые юзеры тебя просто не поймут. Пользователю всегда удобней и легче использовать мерзкий виндовый интерфейс, чем разбираться в чем-то новом и необычном. Поэтому все твои труды могут просто пойти насмарку, да и если уж пишешь под какую-нибудь ось - смирись с ее правилами и стандартами. Вообще, под необычным и пестрым интерфейсом, как правило, авторы стараются скрыть убогость и малую функциональность своих прог, подобные интерфейсы позволительны только гамесам и развлекухам. Посмотри на тот же Win2k - все просто и стандартно, а настоящий UNIX так это вообще обычный shell - строка для ввода команд. ------------------------------------------------------------------- Совет #5 Обязательно изучи размер в байтах всех типов переменных языка, на котором ты кодишь. И не используй "большие" типы переменных, когда этого не требуется, т.к. это ведет к лишнему расходу памяти, к тому же типы переменных, занимающие большее количество памяти, работают медленнее тех, которые требуют меньше памяти. Например, в VisualBasic есть такой тормозной тип переменной, как Variant, который занимает 16 байт, хотя в большинстве случаев вместо него можно использовать другие типы переменных, например Double, требующий всего 8 байт. ------------------------------------------------------------------- Совет #6 Всегда явно указывай типы всех используемых тобой переменных, даже если язык программирования позволяет этого не делать. Например, в VisualBasic тип переменной указывается так: Dim X As Integer. Но если этого не сделать, то по умолчанию переменной X будет присвоен тип Variant (16 байт) вместо необходимого Integer, требующего всего 2 байта памяти. -------------------------------------------------------------------- Совет #7 Помни, что глобальные переменные (extern), а также статические переменные (static) работают в несколько раз медленнее и требуют больше памяти, чем локальные и автоматические переменные (автоматические переменные сохраняют свое значение, пока выполняется процедура, и теряются при выходе из нее). Локальные и автоматические переменные, как правило, объявлены по умолчанию. Поэтому вместо объявления глобальных и статических переменных лучше использовать, например, переменные уровня модуля. ------------------------------------------------------------------- Совет #8 Старайся использовать простые арифметические операции типа сложения или вычитания, т.к. процессор выполняет их гораздо быстрее, чем, например, умножение или деление. Вообще, все арифметические операции можно разделить по скорости выполнения их процессором. Вот некоторые из них, начиная с самой быстрой: 1) присваивание; 2) сложение/вычитание; 3) умножение; 4) деление; 5) возведение в степень и др. Для того чтобы перейти от сложных операций к более простым, сокращай выражения, например, вместо x = a*c + b*c + a*d + b*d правильнее написать x = (a + b)*(c + d). Деление заменяй умножением, например, вместо x = (a + b)/2 пиши x = (a + b)*0,5. Если тебе нужно возвести число в степень, лучше использовать произведение этого числа на само себя. Это будет гораздо быстрее, чем операция ^ в VB или функция pow(x, y) в C/C++. Например, выражение y = x * x * x будет выполнено в 7 раз быстрее, чем y = x ^ 3. Если степень высокого порядка, то ее лучше разбить с помощью временных переменных, например: tmp = x * x * x y = tmp * tmp * x Это будет выполнено в 3 раза быстрее, чем x ^ 7. ------------------------------------------------------------------- Совет #9 Если позволяет твой язык программирования, используй сокращенные операции. Например, такие как в C/C++: инкремент ++ (увеличение на 1), декремент -- (уменьшение на 1), а также операции присваивания, типа += (выражение x += 3 то же самое, что x = x + 3) и т.п. Сокращенные операции выполняются быстрее, кроме того, они позволяют быстрее набивать программу, и компилятор быстрее ее компилирует. -------------------------------------------------------------------- Совет #10 Если в твоем коде есть константы, которые не меняются на протяжении выполнения всей программы, - не делай лишние присваивания. Например: int x = 5, y = 7; if (a < x && b < y) c = x; лучше написать так: if (a < 5 && b < 7) c = 5; Таким образом, ты сократишь код, а также уменьшишь размер скомпилированной программы, сократишь время ее выполнения и освободишь память. -------------------------------------------------------------------- Совет #11 Избегай повторные вычисления одних и тех же выражений, достаточно сделать это один раз и в дальнейшем использовать полученное значение. Например: if (a > x * 3) b = x*3 + (1 + x*3)/(100 + x*3); for (int i = 1; i <= x*3; i++) c = i + b*x*3; правильнее написать так: y = x * 3; if (a > y) b = y + (1 + y)/(100 + y); for (int i = 1; i <= y; i++) c = i + b*y; Это увеличивает скорость выполнения программы. -------------------------------------------------------------------- Совет #12 Внимательно следи за тем, чтобы в циклах не выполнялись операции, которые могут быть выполнены вне цикла. Например, в следующем примере: For i = 1 to 1000 x = x * 7 y =y + i Next i операция x = x * 7 будет выполняться 1000 раз, хотя она свободно может быть выполнена всего один раз вне цикла, как показано в следующем листинге: x = x * 7 For i = 1 to 1000 y = y + i Next i Случаи, подобные первому примеру, сильно тормозят программу. -------------------------------------------------------------------- Совет #13 Чаще всего структуру выбора if лучше разделить на несколько блоков, например: If x > 1 And y < 5 Then i = 0 можно разделить на два блока: If x > 1 Then If y < 5 Then i = 0 End If В последнем случае второй If не выполняется, если первый оказался ложным. Это способствует повышению скорости программы, т.к. исключаются лишние проверки. По тем же соображениям в структуре выбора if /else после оператора else всегда пиши то условие, которое менее вероятно может возникнуть в реальной ситуации. В выражениях с операцией && (логическое И, в C/C++), если отдельные условия независимы, например: if (x = = 0 && y > 1) на первое место всегда записывай то условие, которое вероятнее всего окажется ложным, т.к. в этом случае анализ выражения будет сразу прекращен и передан следующей строке, что сокращает время выполнения программы. А в выражениях с операцией || (логическое ИЛИ), например: if (x >= 1 || y >= 1) на первое место пиши то условие, которое вероятнее всего окажется истинным. ------------------------------------------------------------------- Совет #14 Операции с элементами массива (индексными переменными) всегда выполняются медленнее, чем с обычными переменными. Поэтому операция a*b будет выполнена гораздо быстрее, чем a[i]*b[j], при одинаковых значениях. Следовательно, если необходимо использовать один и тот же элемент массива неоднократно, лучше присвоить его другой переменной и затем использовать ее. В циклах повышение производительности при этом может достигать 80 процентов. Обращение к элементам одномерного массива всегда быстрее, чем к элементам многомерного массива. Поэтому всегда старайся использовать исключительно одномерные массивы, например, вместо матрицы 5 на 5 сделай одномерный массив на 25 элементов.