전에 다른 프레임워크에서 복사한 간단한 로깅 도움말 클래스를 작성했는데, 테스트가 사용하기 쉽지 않습니다. 다음과 같습니다:
이 글은 BlockingCollection 기반의 간단한 로깅 클래스를 재구현합니다.
BlockingCollection<T>은 다음과 같은 기능을 제공하는 스레드 안전 컬렉션 클래스입니다:
메이커-사용자 모델을 구현하세요. 멀티스레딩을 통해 아이템을 추가하고 동시에 가져오기도 합니다. 선택적 최대 수용 인원. 컬렉션이 비어 있거나 가득 차 있을 때는 삽입 및 제거 연산으로 차단됩니다. 삽입 및 제거 시도는 차단되지 않거나 일정 시간 동안 발생하지 않습니다. 캡슐화는 IProducerConsumerCollection<T>의 모든 유형의 컬렉션을 구현합니다 취소 태그를 사용해 취소 작업을 수행하세요. foreach를 사용하는 두 가지 유형의 열거(Visual Basic에서는 For Each)가 지원됩니다: 읽기 전용 열거입니다. 항목이 열거될 때 항목을 제거하는 열거입니다.
마이크로소프트가 소개합니다:하이퍼링크 로그인이 보입니다.
BlockingCollection은 스레드 안전 차단 큐로, 이 기능을 사용하여 프로세스 내에서 메시지 전달, 로깅 등과 같은 생산자-소비자 모드를 구현합니다.
Add 메서드를 호출해 큐에 정보를 추가하고, 큐에 메시지가 없으면 IsCompleted가 항상 while 루프를 차단하여 데드 루프를 일으키지 않습니다. 새 메시지가 나오면 IsFinished in while이 트리거되어 불 타입을 반환하여 실행이 계속됩니다. 즉, 스레드에서 데이터를 가져오는 과정입니다.
이전에는 ManualResetEvent의 WaitOne 메서드를 호출하여 Reset 및 Set 메서드를 호출하여 신호를 전달하는 방식으로 스레드를 차단했습니다.
이 테스트는 10,000개의 로그를 기록하며, 이는 10밀리초 미만의 시간에 걸립니다, 아래 그림에서 볼 수 있습니다:
코드는 다음과 같습니다:
소스 코드 다운로드:
관광객 여러분, 이 게시물의 숨겨진 내용을 보고 싶으시다면 부탁드립니다 회답
|