Использование объектов уровня Application
От: MaximVK Россия  
Дата: 30.09.03 16:54
Оценка:
Чем отличается хранение объекта в Application и использование статических полей какого-нить класса. В случае с хранением объекта в Application нужно-ли синхронизировать методы, которые меняют внутреннее состояния объекта?
Re: Использование объектов уровня Application
От: Gollum Россия  
Дата: 01.10.03 05:13
Оценка:
Здравствуйте, MaximVK, Вы писали:

MVK>Чем отличается хранение объекта в Application и использование статических полей какого-нить класса.


Зависит от того что за поле и какого именно класса.

MVK>В случае с хранением объекта в Application нужно-ли синхронизировать методы, которые меняют внутреннее состояния объекта?


Да
I cant really tell and i dont really care
Eugene Agafonov on the .NET

Re: Использование объектов уровня Application
От: TK Лес кывт.рф
Дата: 01.10.03 05:16
Оценка:
Hello, "MaximVK"
> Чем отличается хранение объекта в Application и использование статических полей какого-нить класса. В случае с хранением объекта в Application нужно-ли синхронизировать методы, которые меняют внутреннее состояния объекта?

Если имеется в виду использование класса HttpApplicationState, отличий практически нет. Если же имеется в виду хранение в одном из полей неследника HttpApplication, то стоит помнить, что экземпляры HttpApplication создаются инфраструктурой ASP.NET и их может быть несколько.
Posted via RSDN NNTP Server 1.6
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Использование объектов уровня Application
От: Mika Soukhov Stock#
Дата: 01.10.03 06:55
Оценка:
Здравствуйте, Gollum, Вы писали:

G>Здравствуйте, MaximVK, Вы писали:


MVK>>Чем отличается хранение объекта в Application и использование статических полей какого-нить класса.


G>Зависит от того что за поле и какого именно класса.


MVK>>В случае с хранением объекта в Application нужно-ли синхронизировать методы, которые меняют внутреннее состояния объекта?


G>Да


Синхронизировать ничего не надо. Этим занимаеться HttpApplicationStateLock, построеныый на принципе ReaderWriterLock.
Re[3]: Использование объектов уровня Application
От: Gollum Россия  
Дата: 01.10.03 07:03
Оценка:
Здравствуйте, Mika Soukhov, Вы писали:

MS>Синхронизировать ничего не надо. Этим занимаеться HttpApplicationStateLock, построеныый на принципе ReaderWriterLock.


Да, но его надо явно вызывать. Например, вот так неправильно:

Dim i As Integer

i = CType(Application("Counter"), Integer)
i += 1
Application("Counter") = i


А вот так — правильно:

Dim i As Integer

Application.Lock()
i = CType(Application("Counter"), Integer)
i += 1
Application("Counter") = i
Application.UnLock()
В лучших книгах всегда нет имен, и в лучших картинах — лиц
Eugene Agafonov on the .NET

Re[4]: Использование объектов уровня Application
От: Mika Soukhov Stock#
Дата: 01.10.03 07:24
Оценка: 68 (5)
Здравствуйте, Gollum, Вы писали:

G>Здравствуйте, Mika Soukhov, Вы писали:


MS>>Синхронизировать ничего не надо. Этим занимаеться HttpApplicationStateLock, построеныый на принципе ReaderWriterLock.


G>Да, но его надо явно вызывать. Например, вот так неправильно:


G>
G>Dim i As Integer

G>i = CType(Application("Counter"), Integer)
G>i += 1
G>Application("Counter") = i
G>


G>А вот так — правильно:


G>
G>Dim i As Integer

G>Application.Lock()
G>i = CType(Application("Counter"), Integer)
G>i += 1
G>Application("Counter") = i
G>Application.UnLock()
G>


Нет. Application.Lock() (в недрах будет вызываться _lock.AcquireWrite()) будет исполнен автоматически при операции Set.
Re[5]: Использование объектов уровня Application
От: uzzy Россия  
Дата: 01.10.03 07:32
Оценка:
Здравствуйте, Mika Soukhov, Вы писали:

MS>>>Синхронизировать ничего не надо. Этим занимаеться HttpApplicationStateLock, построеныый на принципе ReaderWriterLock.


G>>Да, но его надо явно вызывать. Например, вот так неправильно:


G>>
G>>Dim i As Integer

G>>i = CType(Application("Counter"), Integer)
G>>i += 1
G>>Application("Counter") = i
G>>


G>>А вот так — правильно:


G>>
G>>Dim i As Integer

G>>Application.Lock()
G>>i = CType(Application("Counter"), Integer)
G>>i += 1
G>>Application("Counter") = i
G>>Application.UnLock()
G>>


MS>Нет. Application.Lock() (в недрах будет вызываться _lock.AcquireWrite()) будет исполнен автоматически при операции Set.

то есть в этой строчке? :
Application("Counter") = i
... << RSDN@Home 1.1 beta 2 >>
Re[5]: Использование объектов уровня Application
От: Gollum Россия  
Дата: 01.10.03 07:33
Оценка:
Здравствуйте, Mika Soukhov, Вы писали:

MS>Нет. Application.Lock() (в недрах будет вызываться _lock.AcquireWrite()) будет исполнен автоматически при операции Set.


Пока не задекомпилировал сборку System.Web не поверил.

public void Set(string name, object value)
    {
      _lock.AcquireWrite();
      try
      {
        base.BaseSet(name, value);
      }
      finally
      {
        _lock.ReleaseWrite();
      }
    }
        
public object Get(string name)
    {
      object local = null;
      _lock.AcquireRead();
      try
      {
        local = base.BaseGet(name);
      }
      finally
      {
        _lock.ReleaseRead();
      }
      return local;
    }
        
public object this[string name]
    {
      get
      {
        return Get(name);
      }

      set
      {
        Set(name, value);
      }
    }


А зачем они тогда в MSDN пишут, что надо лочить?
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003APR.1033/cpref/html/frlrfSystemWebHttpApplicationStateClassUnLockTopic.htm
И начальник заставы поймет меня, и беспечный рыбак простит
Eugene Agafonov on the .NET

Re[6]: Использование объектов уровня Application
От: TK Лес кывт.рф
Дата: 01.10.03 07:36
Оценка: 6 (1)
Здравствуйте, Gollum, Вы писали:

G>А зачем они тогда в MSDN пишут, что надо лочить?


Лочить надо, если нужно изменить несколько значений за один раз.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[6]: Использование объектов уровня Application
От: Gollum Россия  
Дата: 01.10.03 07:40
Оценка:
Здравствуйте, uzzy, Вы писали:

MS>>Нет. Application.Lock() (в недрах будет вызываться _lock.AcquireWrite()) будет исполнен автоматически при операции Set.

U>то есть в этой строчке? :
U>
U>Application("Counter") = i
U>


И тут, и при чтении тоже.
Мне звонили с открытия пленума — я сказал им, что я не приду
Eugene Agafonov on the .NET

Re[7]: Использование объектов уровня Application
От: uzzy Россия  
Дата: 01.10.03 07:42
Оценка:
Здравствуйте, TK, Вы писали:

TK>Здравствуйте, Gollum, Вы писали:


G>>А зачем они тогда в MSDN пишут, что надо лочить?


TK>Лочить надо, если нужно изменить несколько значений за один раз.

Насколько я понял, надо лочить все равно даже при изменении одного значения. К примеру:
Dim i As Integer

i = CType(Application("Counter"), Integer)
i += 1
Application("Counter") = i


Вызываются двумя параллельными процессами практически одновременно.
1-й процесс прочитал
i = CType(Application("Counter"), Integer)
и приступил к операции
i += 1 // предположим операция занимает длителньое время ~= 1 секунда напрмиер

2-й процесс за это время тоже успел прочесть начать i += 1
1-й процесс записал полученный результат
2-й процесс записал то же самое

или нет ???
... << RSDN@Home 1.1 beta 2 >>
Re[7]: Использование объектов уровня Application
От: Gollum Россия  
Дата: 01.10.03 07:43
Оценка:
Здравствуйте, TK, Вы писали:

G>>А зачем они тогда в MSDN пишут, что надо лочить?


TK>Лочить надо, если нужно изменить несколько значений за один раз.


Понял, спасибо.
В лучших книгах всегда нет имен, и в лучших картинах — лиц
Eugene Agafonov on the .NET

Re[8]: Использование объектов уровня Application
От: TK Лес кывт.рф
Дата: 01.10.03 07:44
Оценка:
Здравствуйте, uzzy, Вы писали:

U>Насколько я понял, надо лочить все равно даже при изменении одного значения.


В ситуации Application("x")++ — естественно нужно лочить руками.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[9]: Использование объектов уровня Application
От: uzzy Россия  
Дата: 01.10.03 07:52
Оценка:
Здравствуйте, TK, Вы писали:

TK>Здравствуйте, uzzy, Вы писали:


U>>Насколько я понял, надо лочить все равно даже при изменении одного значения.


TK>В ситуации Application("x")++ — естественно нужно лочить руками.


то ли я в танке сегодня... то ли все-таки есть разница какая-то особая между

Application("x")++;

и
int i = (int) Application ("x");
i++;
Application ("x") = i;
... << RSDN@Home 1.1 beta 2 >>
Re[10]: Использование объектов уровня Application
От: TK Лес кывт.рф
Дата: 01.10.03 07:55
Оценка:
Здравствуйте, uzzy, Вы писали:

U>>>Насколько я понял, надо лочить все равно даже при изменении одного значения.

TK>>В ситуации Application("x")++ — естественно нужно лочить руками.
U>то ли я в танке сегодня... то ли все-таки есть разница какая-то особая между

U>
U>Application("x")++;
U>

U>и
U>
U>int i = (int) Application ("x");
U>i++;
U>Application ("x") = i;
U>


Да в общем-то никакой.
Основная идея, что нужно делать
Application.Lock();
Application("x")++;
Application.Unlock();


В противном случае, когда веб сервер будет обрабатывать одновременно много запросов — можно потерять часть значений.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[10]: Использование объектов уровня Application
От: mogadanez Чехия  
Дата: 01.10.03 07:57
Оценка:
Здравствуйте, uzzy, Вы писали:

U>то ли я в танке сегодня... то ли все-таки есть разница какая-то особая между


Видимо сегодня день танкиста....
ты, Gollum, я... больше трех — уже толпа
... << RSDN@Home 1.1 beta 2 >>
Re[11]: Использование объектов уровня Application
От: uzzy Россия  
Дата: 01.10.03 07:59
Оценка:
Здравствуйте, TK, Вы писали:

TK>Да в общем-то никакой.

TK>Основная идея, что нужно делать
TK>
TK>Application.Lock();
TK>Application("x")++;
TK>Application.Unlock();
TK>


TK>В противном случае, когда веб сервер будет обрабатывать одновременно много запросов — можно потерять часть значений.

значит Gollum был прав здесь
Автор: Gollum
Дата: 01.10.03
?
... << RSDN@Home 1.1 beta 2 >>
Re[11]: Использование объектов уровня Application
От: Gollum Россия  
Дата: 01.10.03 08:04
Оценка:
Здравствуйте, mogadanez, Вы писали:

U>>то ли я в танке сегодня... то ли все-таки есть разница какая-то особая между


M>Видимо сегодня день танкиста....

M>ты, Gollum, я... больше трех — уже толпа

Надо еще одного найти, и собаку
Если кто-то про этот фильм еще помнит.
Ежели череп прогрызла мышь — время забыть о былом
Eugene Agafonov on the .NET

Re[12]: Использование объектов уровня Application
От: uzzy Россия  
Дата: 01.10.03 08:06
Оценка:
Здравствуйте, Gollum, Вы писали:

G>Здравствуйте, mogadanez, Вы писали:


U>>>то ли я в танке сегодня... то ли все-таки есть разница какая-то особая между


M>>Видимо сегодня день танкиста....

M>>ты, Gollum, я... больше трех — уже толпа

G>Надо еще одного найти, и собаку

G>Если кто-то про этот фильм еще помнит.

помним... понмим, а еще было где-то "Три танкиста, три веселых друга"
... << RSDN@Home 1.1 beta 2 >>
Re[12]: Использование объектов уровня Application
От: TK Лес кывт.рф
Дата: 01.10.03 08:24
Оценка:
Здравствуйте, uzzy, Вы писали:

TK>>В противном случае, когда веб сервер будет обрабатывать одновременно много запросов — можно потерять часть значений.

U>значит Gollum был прав здесь
Автор: Gollum
Дата: 01.10.03
?


Естесвенно — пример правильный.

т.е. если нужна аттомарность действий, то коллекцию можно не лочить, в остальных случаях — работать с ней можно без явных блокировок.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.