응용 프로그램에서 SQL Server 관리 객체를 사용하고 있습니다. 응용 프로그램의 SMO 객체에 대한 대부분의 작업은 UI에서 직접 트리거됩니다. 예 : SMO 객체 (표,보기, ...)에서 속성을 읽거나 쓰는 결과를 가져 오는 객체를 조작하는 사용자.다중 스레드의 SMO 사용
이제 일부 객체를 통해 규칙적인 스캔을 수행하는 백그라운드 작업을 소개하고자합니다 (읽기 전용).
내 질문은 이것이 SMO에 문제를 일으킬 수 있는지입니다. 설명서에서 객체의 인스턴스 멤버는 스레드로부터 안전하지 않습니다. 그래서 내 계획은 UI 나 백그라운드 스레드에서 액세스 할 때마다 각각의 SMO 객체에 잠금을 설정하는 것입니다. 그러나 동시에 두 개의 서로 다른 개체 (예 :보기 및 표)에 액세스하면 어떻게됩니까? 비록 내가 단지 물건을 읽었을지라도, 물건은 완전히 초기화되지 않았을 수도 있고 데이타베이스에서 적재되어야 할 수도 있습니다. 따라서 최악의 경우 SMO는 동시에 두 개체를 초기화해야합니다. SMO가 내부적으로 이것을 어떻게 처리하는지 모르기 때문에 SMO가 허용하는지 또는 문제를 일으키는 지 아는 사람이 있는지 궁금합니다.
이 문제를 해결하는 방법에 대한 다른 제안 사항이 있습니까? 전체 SMO 라이브러리에 대한 글로벌 잠금을 피하고 싶습니다 ...
감사!
"일부 개체를 정기적으로 스캔합니다"를보다 잘 정의해야합니다. SMO 객체에서 수행중인 작업 유형은 무엇입니까? – Paparazzi
SQL Server Managment Studio와 같이 사용자에게 데이터베이스 트리를 표시하기 위해 모든 표준 데이터베이스 개체 (데이터베이스, 테이블, 뷰, 저장 프로 시저)의 이름과 스키마를 읽습니다. 그런 다음 ExtendedProperties 안에있는이 개체에 대한 MS_Description 특성을 읽고 쓰고 있습니다. 백그라운드 스레드는 동일한 등록 규칙을 읽습니다. – aKzenT
전역 잠금 객체가 의미하는 바를 모르거나 완전히 초기화하지 않았습니다. 객체가 완전히 초기화 될 때까지는 객체에 액세스 할 수 없습니다. 동시에 두 개의 객체를 초기화하면 두 개의 객체가 생깁니다. 질문은 무엇입니까? – Paparazzi