В вашем браузере попытайтесь открыть следующую страницу в двух разных вкладках. нажмите кнопку обновления, чтобы избежать попадания на страницу из кэша браузера:Путаница о потоке рабочего процесса
protected void Page_Load(object sender, EventArgs e)
{
Thread.Sleep(10000);
Response.Write(DateTime.Now.ToString());
}
Как вы можете видеть, это, кажется, что есть поток создается для каждого запроса, и они не ждут друг друга нет замка приобрела ,
Теперь создайте следующие страницы, и GlobalCustomClass
GlobalCustomClass
public class GlobalCustomClass
{
public static string GlobalVariable
{
get;
set;
}
}
Default.aspx
protected void Page_Load(object sender, EventArgs e)
{
GlobalCustomClass.GlobalVariable = "Default page";
Thread.Sleep(10000);
Response.Write(DateTime.Now.ToString());
Response.Write("<br />");
Response.Write(GlobalCustomClass.GlobalVariable);
}
Page2.aspx
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(DateTime.Now.ToString());
Response.Write("<br />");
GlobalCustomClass.GlobalVariable = "Page2";
Response.Write(GlobalCustomClass.GlobalVariable);
}
Обновить страницу по умолчанию и до 10 секунд, обновить Page2 .... Default.aspx - это рендеринг «Страница 2». Да, это не потокобезопасно.
Теперь попробуйте это, откройте следующую страницу в двух вкладках браузера:
protected void Page_Load(object sender, EventArgs e)
{
Session["x"] = "ABC";
Thread.Sleep(10000);
Response.Write(DateTime.Now.ToString());
}
Теперь, кажется, что первый замок резьбы на объекте сеанса, а другие должны ждать целых 10 секунд !!
Теперь попробуйте первый случай, но поместите Global.ascx в проект ... и скажите, что, первая нить блокирует что-то !!!!!
В реальном приложении, как правило, доступны глобальные переменные состояния, которым необходима безопасность потоков, например сеансов.
Если у вас есть приложение Backend, которое содержит отчет, для которого требуется 30 секунд. и если 60 пользователей откроют этот отчет, тогда пользовательский номер 61 будет ждать полчаса до загрузки страницы в свой браузер! Это типичная головоломка! и я, вероятно, буду уволен :(
1) Каждый пользователь ждет, пока другой не выполнит свой запрос. что должно сделать любую тяжелую страницу проблемой. потому что он может заставить все веб-приложение реагировать. Согласен?
2) Как исправить эту ситуацию?
3) По какой теме я должен исследовать это? Вы знаете хорошую книгу?
Благодаря
Ну, это было бы Питти видеть Вас уволят! Поможем этому человеку. – usr
http://stackoverflow.com/questions/3629709/i-just-discovered-why-all-asp-net-websites-are-slow-and-i-am-trying-to-work-out –
Вы проверяете это на сервере dev или IIS? –