2009-10-01 19 views
5

Tworzę witrynę ASP.net, która obsługuje tysiące żądań, a wszystko to pochodzi od jednego głównego obiektu, który wszyscy udostępniają, aby go przeczytać. Próbuję zawinąć głowę wokół tych różnych typów zamków.zrozumienie Blokowanie pomocy?

Niektóre typowe pytania mam dla siebie.

  1. Jaki jest zakres każdej aplikacji zamka, sesja, obiekt
  2. Kiedy jest ona prawo do korzystania z jednego nad drugim?
  3. wielu użytkowników może uruchomić kod do zamka w jednym czasie?
  4. Wydajność Hit?

1.

public class MyClass 
    { 
     lock 
     { 
     // DO COOL CODE STUFF. 
     } 
    } 

2.

public class MyClass 
{ 
    Application.Lock 
    // DO COOL CODE STUFF. 
    Application.Unlock 
} 

3.

public static object lockObject = new object(); 
public class MyClass 
{  
    lock(lockObject) 
    { 
     // DO COOL CODE STUFF. 
    } 
} 

4.

private static readonly ReaderWriterLockSlim slimLock = new ReaderWriterLockSlim(); 
public class MyClass 
{ 
    slimLock.EnterWriteLock(); 
    // DO COOL CODE STUFF HERE.  
    slimLock.ExitWriteLock(); 
} 

Odpowiedz

2

Czytaj docs dla wszystkich tych rzeczy:

1)

Application.Lock() and Application.Unlock() 

zamka metoda blokuje innych klientów modyfikowanie zmiennych przechowywanych w obiekt aplikacji citation

2) Nie możesz tego zrobić:

public class MyClass 
{ 
    lock 
    { 
    // DO COOL CODE STUFF. 
    } 
} 

3) ReaderWriterLockSlim powinny być stosowane, jeżeli można mieć wielu klientów czytania naraz, ale zapisu musi mieć wyłączny dostęp.

4) Kod:

public static object lockObject = new object(); 
public class MyClass 
{  
    lock(lockObject) 
    { 
     // DO COOL CODE STUFF. 
    } 
} 

oznacza tylko jeden wątek może być w tym bloku w danym czasie. Znaczenie serializowanego dostępu do odczytu.

1

Zablokowanie pojedynczego obiektu nie będzie bardzo dobrze skalowane. Jako alternatywę proponuję uwzględnić wzorzec projektowy Object Pool. Jest on znacznie bardziej zdolny do sprostania rosnącym wymaganiom użytkowników.