Chƣơng 1 GIỚI THIỆU
2.3. Các kỹ thuật tối ƣu hiệu năng server-side
2.3.5. Sử dụng mẫu singleton
Đây là một mẫu thiết kế rất phổ biến để tránh việc khởi tạo đối tƣợng nhiều lần thay vì đƣợc khởi tạo một lần duy nhất. Hai mẫu cài đặt dƣới đây áp dụng cho hai trƣờng hợp Thread-save và Lazy-load.
Mẫu cài đặt thứ nhất
Đảm bảo thread-save vì trong trƣờng hợp có rất nhiều thread cùng truy cập vào đối tƣợng có thể dẫn đến trƣờng hợp đối tƣợng đƣợc tạo ra ồ ạt gây tốn bộ nhớ và tốn thời gian thực thi CPU. Vì thế các chuyên gia sẽ khởi tạo đối tƣợng ở hàm static để đảm bảo đối tƣợng chỉ đƣợc tạo duy nhất một lần ở AppDomain. Mẫu này phù hợp cho những trƣờng hợp khởi tạo đối tƣợng nhỏ và nhẹ ít tốn thời gian khởi tạo, và đƣợc triệu gọi thƣờng xuyên trong toàn ứng dụng.
public sealed class Singleton {
static readonly Singleton instance=new Singleton(); // Explicit static constructor to tell C# compiler // not to mark type as beforefieldinit
static Singleton() {
}
public static Singleton Instance { get { return instance; } } }
Mẫu cài đặt thứ hai
Đảm bảo tính lazy-load. Mẫu này áp dụng trong các trƣờng hợp các đối tƣợng cần khởi tạo lớn và tốn thời gian, quá trình khởi tạo đòi hỏi những yêu cầu phức tạp, đối tƣợng chỉ đƣợc triệu gọi khi cần thiết.
public sealed class Singleton {
Singleton() {
}
public static Singleton Instance { get { return Nested.instance; } } class Nested {
// Explicit static constructor to tell C# compiler // not to mark type as beforefieldinit
static Nested() {
}
internal static readonly Singleton instance = new Singleton(); }
}