2010-03-06 6 views
0

나는 호출자의 동일한 스레드에서 데이터베이스에 직접 쓰는 집에서 개발 된 추적 API에 의해 제공되었습니다. 나는 접근법을 didnt한다. 사용자 지정 데이터베이스 tracelistner를 구현한다고 생각했지만 별도의 낮은 우선 순위 스레드에서 실행되는지 궁금하거나 직접 스레딩을 관리해야합니까?.NET : tracelistener가 낮은 우선 순위 스레드에서 실행됩니까?

답변

2

먼저 스레드의 우선 순위를 설정해서는 안됩니다. 일반적으로 스레드의 우선 순위 상승 (또는이 경우에는 deelevation)이 OS가 스레드를 붕괴시키고 있다고 느낄 때 (우선 순위를 낮추거나 스레드를 우선 순위로 사용하지 않는 경우) OS가 오버라이드하므로 일반적으로 나쁜 생각입니다. 너무 많은 시간 (고도의 경우).

즉, .NET에서는 데이터베이스 호출을 비동기 적으로 수행하는 것이 매우 쉽습니다. 예를 들어, 비동기 호출에 Begin * 패턴을 사용하는 SqlCommand class has a number of methods과 .NET의 대부분의 다른 데이터베이스 공급자가 적합합니다.

추적 API가 허용하는 경우 이러한 메커니즘 중 하나를 사용하여 데이터베이스 작업을 시작한 다음 비동기 메커니즘에 제공하는 콜백을 마무리해야합니다.

당신이 그때는 아마 (이 추적 작업이 lenghty없는 가정) 비동기 작업을 대기하는 ThreadPool class (QueueUserWorkItem에 특히 전화)를 사용한다, 비동기 호출을 허용하는 공급자를 사용 하지 경우.

.NET 4.0을 사용하는 경우 System.Threading.Tasks namespace의 클래스를 살펴보고 ThreadPool과 같은 작업을 수행 할 수도 있습니다 (여러 풀, 취소 및 기타 기능을 허용하는 더 나은 API가 있음). ThreadPool에는 가지고 있지 않습니다).

을 수행하는 데 필요한 모든 관련 정보를 얻은 후에을 시작해야합니다. 예를 들어, 비동기 호출을 수행하기 전에 작업의 날짜/시간을 얻으려고합니다. 비동기 호출은 해당 값이 추적중인 작업을 반영하는 것이지 추적 자체는 아닙니다.