Что такое производительность [Dos/Don'ts] в С# -ASP.NET

Я завершаю один из моих проектов и просматриваю весь проект, который ищет ошибки, ошибки и ошибки производительности. Я использую MVC. Я поймал один Не делаю, и это:

Никогда не помещайте RenderPartial в цикл. это резко снизит весь ваш сервер.

Ответ 1

Никогда хранить WebControl для сеанса.

Поскольку у него есть ссылка на объект "Страница", он заканчивает хранение каждого элемента управления сеансом.

Ответ 2

Не оптимизируйте преждевременно.:) Если сайт не работает, профайл кода, чтобы определить, где провести время.

Ответ 3

Запустили ли вы свою программу через FxCop? Он имеет набор правил для производительности.

Ответ 4

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

Ответ 5

НЕ играйте с явной сборкой мусора.

Ответ 6

Большинство проблем с производительностью связаны с доступом к диску или вызовами через сети.

Поэтому будьте осторожны, как и как часто вы получаете доступ к файловой системе или базе данных. Вам нужно сделать так много вызовов по сети, или вы можете сделать это за один раз.

Один хороший пример:

  • значение сохраняется в сеансе
  • сеанс настроен на использование SQL-сервера Значение
  • используется только один раз каждые десять запросов
  • для каждого запроса значение будет считано из базы данных, а затем записано в базу данных

В этом случае лучшим решением может быть, чтобы написать собственный код для хранения и чтения значения.

Ответ 7

Кэширование поможет вам повысить производительность, но вы должны осторожно использовать его только там, где это имеет смысл

Ответ 9

DO использовать статические методы - но только если этот метод часто используется.

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

Ответ 10

В С# объекты всегда создаются с новыми. Это одно может быть недостатком в определенной перспективе. Например, если вы создаете объект внутри цикла (что означает, что для каждой итерации в цикле создается новый объект), вы можете замедлить свою программу.

for (int i = 0; i < 1000; ++i)
{
   Object o = new Object();
   //...
}

Вместо этого создайте экземпляр вне цикла. Объект o = новый объект();

Object o = new Object();
for (int i = 0; i < 1000; ++i)
{
   //...
}

Создайте объект только в цикле, если вам действительно нужно...

Возможно, что немного С++ поможет вам понять механику и узнать, когда и где оптимизировать ваш код. Хотя С++ - это другой язык, вы можете применить к другим языкам много вещей, как только вы поймете основные принципы управления памятью (новые, удаленные, указатели, динамические массивы/статические массивы и т.д.).

Ответ 11

При необходимости используйте только блоки try/catch. Они замедляют ваше приложение.

EDIT для ясности: Под "необходимым" я имею в виду, чтобы поймать реальные ошибки.

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

Не используйте исключения для управления потоком программы. Я не знаю, кто сказал это сначала, но я вспоминаю фразу " Исключения должны быть исключительными!". Они должны быть для случаев, когда возникают непредвиденные проблемы, вещи, которые не могут быть протестированы до выполнения кода и выбрасывания их.

Худший пример, который я вижу во всем, - это что-то в этом роде...

int i = 0;
try
{
    i = int.Parse(txt);
} catch {Exception x) {
    // Do nothing, i = 0
}