2009-10-01 27 views
5

Binlerce isteği işleyen bir ASP.net web sitesi oluşturuyorum ve bunların hepsi, okumak için paylaştıkları bir ana nesneden kaynaklanıyor. Kafamı bu farklı kilitler etrafında sarmaya çalışıyorum.anlama Kilitleme yardımı?

Her biri için sahip olduğum bazı genel sorular. Ne zaman sağ üst üste kullanmaktır

  1. her kilit Uygulama, Oturum kapsamı nedir

    ,
  2. Nesne?
  3. Birden çok kullanıcı kodu bir defada kilitte çalıştırabilir mi?
  4. Performans 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(); 
} 

cevap

2

bütün bunlar için docs okuyun:

1)

Application.Lock() and Application.Unlock() 

Kilit yöntemi blokları diğer istemciler Uygulama nesne citation

saklanan değişkenler değiştirmesini

2) Bunu yapamazsınız:

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

3) ReaderWriterLockSlim, birden fazla istemcinin aynı anda okumasına sahip olmanız durumunda kullanılmalıdır, ancak yazma erişiminin özel erişime sahip olması gerekir.

4) Bu kod:

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

sadece 1 evre aynı anda bu blok içinde olabilir anlamına gelecektir. Serileştirilmiş okuma erişimi.

1

Tek bir nesneyi kilitlemek çok iyi ölçeklenmeyecektir. Alternatif olarak, Object Pool tasarım desenini göz önünde bulundurmanızı öneririm. Artan kullanıcı taleplerinizi karşılamak için büyümek çok daha yetenekli.