Синтаксический сахар может в некоторых случаях взаимодействовать неприятными способами.
некоторые определенные примеры:
первым является c# (или Java) определенная, Автоматическая упаковка и блокировать/синхронизировать конструкция
private int i;
private object o = new object();
private void SomethingNeedingLocking(bool b)
{
object lk = b ? i : o;
lock (lk) { /* do something */ }
}
В этом примере полезная конструкция блокировки, которая может использовать любой объект в качестве точки синхронизации, объединенной с автоупаковкой, приводит к возможной ошибке. Блокировка просто взята на новом помещенном в коробку экземпляре меня каждый раз. Спорно, что конструкция блокировки по полезному и что некоторая другая определенная конструкция, на которой можно заблокировать, была бы лучше, но конечно комбинация все еще испорчена.
Несколько объявление переменной и указатели:
long* first, second;
ошибка классика А (хотя легкий для определения). Сахар нескольких переменных не будет соответствовать объявлению указателя.
Некоторые конструкции не нуждаются в других аспектах сахара для порождения проблем, классический пример ++ оператор. Это аккуратно позволяет Вам постараться не писать
i = i + 1;
, А широко использовал конструкцию (и тот, который сам имеет объем для ошибок, так как необходимо не забыть обновлять обе переменные, если Вы хотите измениться от использования i). Однако, так как это легко встроить в рамках других выражений, проблема префикса и постфикса возникает. При использовании в для цикла это не имеет значения, оценка происходит за пределами любых других оценок, но используемый в другом месте это может быть источник беспорядка (так как можно встраивать очень важный аспект вычисления (должно ли текущее или следующее значение использоваться) в очень маленькую и легко пропущенную форму.
Все вышеупомянутое (кроме, возможно, того блокировки/поля, которое компилятор действительно должен определить для Вас) случаи, где использование может быть прекрасным, или опытные программисты могут думать, что "это совершенно ясно мне", но объем для беспорядка существует, конечно, для программистов новичка или тех, которые перемещаются в другой синтаксис.
Я полагаю, что сейчас на виртуальной машине установлена 32-разрядная ОС. Поскольку Standard Edition не разрешает AWE два сервера (IIS и SQL), SQL Server загружает максимум, примерно 1,8 ГБ, и оставляет много оперативной памяти для IIS и ОС. Но как только вы перейдете на 64-битную ОС, все изменится, поскольку SQL Server возьмет всю оперативную память для своего буферного пула (~ 5 ГБ, если доступно 6 ГБ), а затем начнет возвращать ее ОС, когда уведомит . Это поведение можно изменить, настроив параметры памяти SQL Server . Разделив IIS и SQL на отдельные виртуальные машины, вы оставляете всю память на виртуальной машине SQL для ее пулов буферов, и это хорошо. В идеале у вас должно быть достаточно оперативной памяти, чтобы SQL мог загружать всю базу данных в память (включая tempdb) и касаться диска только для записи журнала и когда он должен проверять базу данных. Другими словами, больше ОЗУ означает более быстрый SQL. Это, безусловно, самый важный аппаратный ресурс, который требуется SQL для обеспечения производительности, и он даст наибольшую отдачу от вложенных средств.
Теперь вернемся к широкому вопросу о «переключении при отказе». В SQL Server решения для высокой доступности разделены на две категории: автоматические и ручные . Для автоматического аварийного переключения у вас действительно есть только несколько решений:
Если вы рассматриваете решения ручного аварийного переключения, есть еще пара альтернатив:
Доставка журналов . Доставка журналов - это в основном внешнее зеркалирование. Вместо передачи записей журнала в реальном времени через выделенное TCP-соединение, журнал передается с помощью операций копирования файлов. Есть очень мало причин для выбора доставки журналов вместо зеркалирования: резервная база данных может быть запрошена для создания отчетов, резервная база данных может быть расположена в месте со спорадическим подключением, резервная может быть размещена на действительно маломощной машине .
Репликация. Это действительно не решение высокой доступности. Репликация - это решение для предоставления копий данных и / или обмена обновлениями данных между сайтами. Хотя его можно использовать для развертывания какого-то импровизированного «решения» высокой доступности, с этим есть много проблем и в основном нет преимуществ. По сравнению с доставкой журналов и зеркалированием, он имеет ряд дополнительных недостатков, поскольку единицей аварийного переключения является даже не база данных, а только фрагменты данных в базе данных (некоторые таблицы). Метаданные, такие как разрешения пользователя и безопасности, не обрабатываются, изменения схемы должны выполняться в режиме с учетом репликации , а некоторые изменения даже нельзя реплицировать. По контракту и зеркальное отображение, и доставка журналов предоставляют резервную копию, идентичную производственной базе данных, которая автоматически покрывает любые изменения, внесенные в базу данных.
Вы упоминаете, что вас беспокоят затраты на лицензию: на самом деле вы этого не делаете. Не нужна лицензия для любого из пассивных серверов с любой из этих технологий , кроме репликации. Для резервных серверов требуется лицензия только в том случае, если они становятся активными и работают с базой данных более 30 дней.
Учитывая, что вы планируете развертывание на виртуальных машинах, моим выбором будет кластеризация. Если вы планируете развертывание на «железе», я бы рекомендовал зеркальное копирование из-за стоимости оборудования для кластеризации.
SQL Server всегда работает лучше всего, если это «ЕДИНСТВЕННЫЙ» компонент, работающий на машине. Просто сделав это, вы получите быструю, легкую и хорошую выгоду. Кажется, ему нравится все контролировать, и он всегда счастлив, когда может:)
Естественно, разделение IIS и SQL-сервера - это первый шаг. Sql-сервер действительно хочет иметь для себя полноценную машину.
Второе, что важно, - это анализировать приложение во время его работы. Никогда не пытайтесь оптимизировать производительность вашего приложения, не имея реальных данных об использовании, потому что вы, вероятно, просто тратите время на оптимизацию того, что редко вызывается. Один из методов, который я успешно использовал в прошлом, - это создать System.Diagnostics.Stopwatch в Request_Begin в global.asax, затем сохранить его в контекстной переменной
var sw = new Stopwatch();
sw.Start()
HttpContext.Current.Items["stopwatch"] = sw;
. В Request_End вы снова получите секундомер
sw = HttpContext.Current.Items["stopwatch"];
sw.Stop();
Timespan ts = sw.Elapsed;
. запишите в таблицу журнала, сколько времени потребовалось для обработки запроса. Также регистрируйте URL (как с параметрами строки запроса, так и без них) и всевозможные вещи, которые помогут вам анализировать производительность.
Затем вы можете проанализировать свое приложение и определить, какие операции занимают больше всего времени, какие вызываются больше всего, и т. д. Это позволит вам увидеть, есть ли одна страница, которая запрашивается много, и обычно это занимает много времени, это должно быть целью оптимизации с использованием любых инструментов, которые у вас есть для этого, как .NET, так и SQL. профилировщики.
Другие вещи, которые я также обычно регистрирую, - это IP-адреса и ID пользователей, вошедших в систему. Это также дает мне бесценный инструмент для отладки при возникновении ошибок.
Причина, по которой он помещается в таблицу, а не записывается в файл журнала, заключается в том, что вы можете использовать синтаксис SQL для фильтрации, группировки, вычисления среднего времени, и т. д.
Затем вы можете проанализировать свое приложение и определить, какие операции занимают больше всего времени, какие вызываются чаще всего и т. Д. Это позволит вам увидеть, есть ли одна страница, которая запрашивается много, и обычно это занимает много времени. Для завершения это должно быть целью оптимизации с использованием любых инструментов, которые у вас есть для этого, как профилировщиков .NET, так и SQL.
Другие вещи, которые я также обычно регистрирую, - это IP-адреса и ID пользователя для зарегистрированных пользователей. Это также дает мне бесценный инструмент отладки при возникновении ошибок.
Причина, по которой он помещается в таблицу, а не записывается в файл журнала, состоит в том, что вы можете использовать синтаксис SQL для фильтрации, группировки, вычисления среднего времени и т.д. и т. д.
Затем вы можете проанализировать свое приложение и определить, какие операции занимают больше всего времени, какие вызываются чаще всего и т. Д. Это позволит вам увидеть, есть ли одна страница, которая запрашивается много, и обычно это занимает много времени. Для завершения это должно быть целью оптимизации с использованием любых инструментов, которые у вас есть для этого, как профилировщиков .NET, так и SQL.
Другие вещи, которые я также обычно регистрирую, - это IP-адреса и ID пользователя для зарегистрированных пользователей. Это также дает мне бесценный инструмент для отладки при возникновении ошибок.
Причина, по которой он помещается в таблицу, а не записывается в файл журнала, заключается в том, что вы можете использовать синтаксис SQL для фильтрации, группировки, вычисления среднего времени, и т. д.
и обычно это занимает много времени, это должно быть целью оптимизации с использованием любых инструментов, которые у вас есть для этого, профилировщиков .NET и SQL.Другие вещи, которые я также обычно регистрирую, - это IP-адреса и ID пользователя. для авторизованных пользователей. Это также дает мне бесценный инструмент отладки при возникновении ошибок.
Причина, по которой он помещается в таблицу, а не записывается в файл журнала, состоит в том, что вы можете использовать синтаксис SQL для фильтрации, группировки, вычисления среднего времени и т.д. и т. д.
и обычно это занимает много времени, это должно быть целью оптимизации с использованием любых инструментов, которые у вас есть для этого, профилировщиков .NET и SQL.Другие вещи, которые я также обычно регистрирую, - это IP-адреса и ID пользователя. для авторизованных пользователей. Это также дает мне бесценный инструмент отладки при возникновении ошибок.
Причина, по которой он помещается в таблицу, а не записывается в файл журнала, состоит в том, что вы можете использовать синтаксис SQL для фильтрации, группировки, вычисления среднего времени и т.д. и т. д.
Вы должны обратиться к этим 2 статьям о codeproject для настройки производительности ASP.Net
1. http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx
2. http://www.codeproject.com/KB/aspnet/aspnetPerformance.aspx
Я лично применил эти методы в своих приложениях asp.net и добился повышения производительности более чем на 30%.
Кроме того, вы можете обратитесь к этой статье, чтобы узнать о времени безотказной работы вашего приложения 99,99%.
Похоже, вы действительно спрашиваете, следует ли размещать БД на отдельной машине. Это может не улучшить производительность (она фактически будет уменьшаться по мере увеличения задержки), но улучшит масштабируемость (что, я полагаю, это то, что вам действительно нужно).
Производительность <> масштабируемость.
Однако в игру вступают другие проблемы - если вы не хватает оперативной памяти, производительность может снизиться, если база данных находится в одном корпусе - SQL-сервер любит использовать оперативную память.
Вот почему для таких вещей, как TFS, которые используют SQL-сервер, для небольшого числа пользователей Microsoft рекомендует все это установить. на 1 машине, но для большего числа пользователей Microsoft рекомендует, чтобы БД располагалась на другом сервере.
Вы можете прочитать о вариантах развертывания TFS здесь .
Переключение управления состоянием SQL Server не увеличит производительность - скорее всего, снизит ее, но вы получите другие преимущества (например, надежность).
Похоже, вам действительно нужно сначала выяснить, в чем заключается узкое место производительности. По моему опыту, это обычно находится в базе данных.
Вы изучали стандартные методы оптимизации ASP.NET, такие как кэширование? Microsoft предоставляет руководство по настройке приложения , которое также может быть полезно для вас.
Если вы используете SQL Server в сценарии веб-приложения, если вы используете SQL Server 2005 и выше, вы, возможно, захотите прочитать о Изоляция моментального снимка . Иногда его неиспользование является причиной проблем с производительностью веб-приложений.
Похоже, вам нужно сначала выяснить, в чем заключается узкое место производительности. По моему опыту, это обычно находится в базе данных.
Вы изучали стандартные методы оптимизации ASP.NET, такие как кэширование? Microsoft предоставляет руководство по настройке приложения , которое также может быть полезно для вас.
Если вы используете SQL Server в сценарии веб-приложения, если вы используете SQL Server 2005 и выше, вы, возможно, захотите прочитать о Изоляция моментального снимка . Иногда его неиспользование может стать причиной проблем с производительностью веб-приложений.
Похоже, вам нужно сначала выяснить, в чем заключается узкое место производительности. По моему опыту, это обычно находится в базе данных.
Вы изучали стандартные методы оптимизации ASP.NET, такие как кэширование? Microsoft предоставляет руководство по настройке приложения , которое также может быть полезно для вас.
Если вы используете SQL Server в сценарии веб-приложения, если вы используете SQL Server 2005 и выше, вы, возможно, захотите прочитать о Изоляция моментального снимка . Иногда его неиспользование является причиной проблем с производительностью веб-приложений.
Поскольку вы используете SQL Server в сценарии веб-приложения, если вы используете SQL Server 2005 и выше, вы можете прочитать о Изоляция моментальных снимков . Иногда его неиспользование является причиной проблем с производительностью веб-приложений.
Поскольку вы используете SQL Server в сценарии веб-приложения, если вы используете SQL Server 2005 и выше, вы можете прочитать о Изоляция моментальных снимков . Иногда его неиспользование является причиной проблем с производительностью веб-приложений.
Может помочь разделение слоев. Часто настройка машины для БД довольно специфична, так что это разумное первое усилие.
Однако, если у вас есть два типа действий пользователя, один из которых очень тяжелый, тогда вы всегда будете рисковать, что несколько активных пользователей повредят остальному населению.
Вы можете принять во внимание две вещи: