Sử dụng mẫu singleton

Một phần của tài liệu Nghiên cứu áp dụng các kỹ thuật phát triển web tiên tiến làm tăng tốc độ tối ưu hiệu năng của ứng dụng web (Trang 43 - 44)

Đâ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.

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

}

Một phần của tài liệu Nghiên cứu áp dụng các kỹ thuật phát triển web tiên tiến làm tăng tốc độ tối ưu hiệu năng của ứng dụng web (Trang 43 - 44)