Я завершаю один из моих проектов и просматриваю весь проект, который ищет ошибки, ошибки и ошибки производительности. Я использую MVC. Я поймал один Не делаю, и это:
Никогда не помещайте RenderPartial в цикл. это резко снизит весь ваш сервер.
Я завершаю один из моих проектов и просматриваю весь проект, который ищет ошибки, ошибки и ошибки производительности. Я использую MVC. Я поймал один Не делаю, и это:
Никогда не помещайте RenderPartial в цикл. это резко снизит весь ваш сервер.
Никогда хранить WebControl для сеанса.
Поскольку у него есть ссылка на объект "Страница", он заканчивает хранение каждого элемента управления сеансом.
Не оптимизируйте преждевременно.:) Если сайт не работает, профайл кода, чтобы определить, где провести время.
Запустили ли вы свою программу через FxCop? Он имеет набор правил для производительности.
Не настраивайте профиль или не оценивайте его в конфигурации отладки. Конфигурация отладки не предназначена для быстрой работы, и вы можете сделать выводы о производительности, которые являются неправильными (например, идея, что частичные представления/пользовательские элементы управления медленные, это верно в конфигурации отладки, но не в конфигурации выпуска). Когда вы профиль для измерения производительности, вы должны использовать конфигурацию выпуска, чтобы вы могли видеть, где возникают реальные проблемы.
НЕ играйте с явной сборкой мусора.
Большинство проблем с производительностью связаны с доступом к диску или вызовами через сети.
Поэтому будьте осторожны, как и как часто вы получаете доступ к файловой системе или базе данных. Вам нужно сделать так много вызовов по сети, или вы можете сделать это за один раз.
Один хороший пример:
В этом случае лучшим решением может быть, чтобы написать собственный код для хранения и чтения значения.
Кэширование поможет вам повысить производительность, но вы должны осторожно использовать его только там, где это имеет смысл
Не запускать производственное приложение ASP.NET с включенным debug = "true"
DO использовать статические методы - но только если этот метод часто используется.
НЕ отмечайте переменную как статическую, если вы действительно не хотите, чтобы значение переменной было одинаковым во всех экземплярах (другой разработчик сделал это, и мне посчастливилось отлаживать, почему мы получили странное поведение только тогда, когда несколько пользователей попали на сайт). Это не по соображениям производительности, а просто хороший совет.
В С# объекты всегда создаются с новыми. Это одно может быть недостатком в определенной перспективе. Например, если вы создаете объект внутри цикла (что означает, что для каждой итерации в цикле создается новый объект), вы можете замедлить свою программу.
for (int i = 0; i < 1000; ++i)
{
Object o = new Object();
//...
}
Вместо этого создайте экземпляр вне цикла. Объект o = новый объект();
Object o = new Object();
for (int i = 0; i < 1000; ++i)
{
//...
}
Создайте объект только в цикле, если вам действительно нужно...
Возможно, что немного С++ поможет вам понять механику и узнать, когда и где оптимизировать ваш код. Хотя С++ - это другой язык, вы можете применить к другим языкам много вещей, как только вы поймете основные принципы управления памятью (новые, удаленные, указатели, динамические массивы/статические массивы и т.д.).
При необходимости используйте только блоки try/catch. Они замедляют ваше приложение.
EDIT для ясности: Под "необходимым" я имею в виду, чтобы поймать реальные ошибки.
Если вы можете написать какой-то код и быть активным, чтобы убедиться, что ошибка не будет выбрана, сделайте это, так как это будет более результативным, чем позволить исключению быть брошенным, а затем обрабатывать его.
Не используйте исключения для управления потоком программы. Я не знаю, кто сказал это сначала, но я вспоминаю фразу " Исключения должны быть исключительными!". Они должны быть для случаев, когда возникают непредвиденные проблемы, вещи, которые не могут быть протестированы до выполнения кода и выбрасывания их.
Худший пример, который я вижу во всем, - это что-то в этом роде...
int i = 0;
try
{
i = int.Parse(txt);
} catch {Exception x) {
// Do nothing, i = 0
}