c# singleton 예제

Skrevs fredagen den 2 augusti, 2019

싱글톤 패턴은 소프트웨어 엔지니어링에서 가장 잘 알려진 패턴 중 하나입니다. 기본적으로 싱글톤은 자체의 단일 인스턴스만 만들 수 있는 클래스이며 일반적으로 해당 인스턴스에 대한 간단한 액세스 권한을 부여합니다. 일반적으로 singletons는 인스턴스를 만들 때 매개 변수를 지정할 수 없습니다. 동일한 매개 변수를 가진 모든 요청에 대해 동일한 인스턴스에 액세스해야 하는 경우 팩터리 패턴이 더 적합합니다. 이 문서에서는 매개 변수가 필요하지 않은 상황만 다룹니다. 일반적으로 싱글톤의 요구 사항은 인스턴스가 처음 필요할 때까지 인스턴스가 만들어지지 않는다는 것입니다. C#에서 싱글톤 패턴을 구현하는 방법에는 여러 가지가 있습니다. 독자는 그가 동기화 측면을 캡슐화 한 방법을 자세히 나에게 작성했습니다, 나는 인정하면서 몇 가지 매우 특정 상황에서 유용 할 수 있습니다 (특히 당신이 매우 높은 성능을 원하는 곳, 그리고 여부를 결정하는 능력 단일 톤이 만들어졌으며, 호출되는 다른 정적 멤버에 관계없이 전체 게으름이 생성되었습니다.) 나는 개인적으로 상황이이 페이지에 더 가고 장점에 충분히 자주 오는 것을 볼 수 없습니다,하지만 당신은 그 상황에 있다면 저를 우편으로 보내 주시기 바랍니다. 당신이 볼 수 있듯이, 이것은 정말 매우 간단합니다 – 그러나 왜 스레드 안전하고 얼마나 게으른가? C#의 정적 생성자는 클래스의 인스턴스가 만들어지거나 정적 멤버가 참조될 때만 실행되고 AppDomain당 한 번만 실행하도록 지정됩니다. 새로 생성되는 형식에 대한 이 검사를 실행해야 한다는 점을 감안할 때 이전 예제와 같이 추가 검사를 추가하는 것보다 빠릅니다.

그러나 몇 가지 주름이 있습니다: C#에서 싱글톤 패턴을 구현하는 다양한 방법이 있습니다. 나는 가장 일반적으로 볼 수있는, 스레드 안전하지 않은, 우아함의 역순으로 여기에 제시하고, 완전히 게으른로드, 스레드 안전, 간단하고 높은 성능의 버전으로 작업한다. 이 실제 코드는 싱글톤 패턴을 로드밸런싱 개체로 보여 줍니다. 서버가 온-오프라인으로 동적으로 올 수 있고 모든 요청이 (웹) 팜의 상태에 대한 지식이 있는 하나의 개체를 통과해야 하기 때문에 클래스의 단일 인스턴스(singleton)만 만들 수 있습니다. 경우에 따라 예외를 throw할 수 있지만 전체 응용 프로그램에 치명적이지 않을 수 있는 단일 생성자에서 작업을 수행해야 하는 경우가 있습니다. 잠재적으로 응용 프로그램에서 문제를 해결할 수 있으며 다시 시도하려고 할 수 있습니다. 이 단계에서는 형식 초기화자를 사용하여 단일 톤을 생성하는 데 문제가 됩니다. 다른 런타임이 이 경우를 다르게 처리하지만 원하는 작업을 수행하는 작업(형식 초기화자를 다시 실행)을 수행하는 것은 알 수 없으며, 그렇지 않은 경우에도 다른 런타임에서 코드가 손상될 수 있습니다. 이러한 문제를 방지하려면 페이지에 나열된 두 번째 패턴을 사용하는 것이 좋습니다 .

Teater Kapija
Örmölla 321
SE-274 56 Abbekås

+46 (0)411 533 772
+46 (0)70 740 17 61

info@kapija.com
www.kapija.com