2009-10-01 46 views
5

Tôi đang tạo một trang web ASP.net xử lý hàng nghìn yêu cầu và tất cả bắt nguồn từ một đối tượng chính mà tất cả chúng đều chia sẻ để đọc nó. Tôi đang cố gắng quấn đầu quanh những loại khóa khác nhau này.sự hiểu biết Khóa trợ giúp?

Một số câu hỏi phổ biến tôi có cho mỗi câu hỏi.

  1. phạm vi của mỗi ứng dụng khóa, phiên là gì, đối tượng
  2. Khi nào nó quyền sử dụng một trong khác không?
  3. Nhiều người dùng có thể chạy mã trong khóa cùng một lúc không?
  4. Hiệu suất đạt được?

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(); 
} 

Trả lời

2

Đọc các tài liệu cho tất cả những điều này:

1)

khách hàng
Application.Lock() and Application.Unlock() 

Các Khóa phương pháp khối khác từ sửa đổi các biến lưu trữ trong đối tượng Application citation

2) Bạn không thể làm điều này:

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

3) ReaderWriterLockSlim nên được sử dụng nếu bạn có thể có nhiều khách hàng đọc cùng một lúc, nhưng quyền truy cập ghi phải có quyền truy cập độc quyền.

4) Mã này:

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

sẽ có nghĩa là chỉ có 1 chủ đề có thể nằm trong đó khối cùng một lúc. Có nghĩa là truy cập đọc theo thứ tự.

1

Việc khóa một đối tượng sẽ không được chia tỷ lệ rất tốt. Thay vào đó, tôi sẽ đề xuất xem xét mẫu thiết kế Object Pool. Nó có khả năng phát triển hơn để đáp ứng nhu cầu ngày càng tăng của người dùng.

Các vấn đề liên quan