시스템. 타이머.타이머 대 시스템.스레드화.타이머
저는 최근에 가능한 타이머 몇 개를 확인해 보았는데 (스레드 풀링을 지원하기 때문에) 필요해 보이는 타이머들입니다.
저는 게임을 만들고 있으며, 다양한 간격으로 모든 종류의 이벤트를 사용할 계획입니다.
어떤 것이 가장 좋을까요?
이 문서는 상당히 포괄적인 설명을 제공합니다.
".NET Framework 클래스 라이브러리의 타이머 클래스 비교" - .chm 파일로도 사용 가능
구체적인 차이점은System.Timers.Timer
멀티스레드 애플리케이션용으로 조정되어 있으므로 이를 통해 스레드 안전합니다.SynchronizationObject
에 면에재산반,,System.Threading.Timer
역설적이게도 즉시 사용할 수 있는 스레드 세이프가 아닙니다.
간격이 얼마나 작을 수 있는지와 관련이 있기 때문에 둘 사이에 차이가 있다고 생각하지 않습니다.
System.Threading.Timer
일반 타이머입니다.(작업자 풀에서) 스레드 풀 스레드를 호출합니다.
System.Timers.Timer
입니다.System.ComponentModel.Component
그것으로 끝System.Threading.Timer
는 특정 스레드에 대한 디스패치에 사용되는 몇 가지 추가 기능을 제공합니다.
System.Windows.Forms.Timer
대신 기본 메시지 전용 HWND를 래핑하고 창 타이머를 사용하여 해당 HWND 메시지 루프의 이벤트를 발생시킵니다.
앱에 UI가 없고 가장 가볍고 범용적인 앱을 원하는 경우. (디스패치를 하는 것이 입니다.)System.Threading.Timer
틀에 들어가는 것만큼 좋습니다.
'레드세프가아닌이무 '완는가지이못다 '의 ' safe'잘 System.Threading.Timer
예. 아마도 이 질문에서 질문한 것과 동일할 것입니다.시스템의 나사산 안전성.타이머. 타이머 대 시스템.스레드화.타이머 또는 모든 사용자는 다음을 의미합니다.
타이머를 사용할 때 경주 조건을 기록하는 것은 쉽습니다.예: 다음 질문을 참조하십시오.타이머(시스템).나사산) 나사산 안전
타이머 이벤트를 트리거하고 첫 번째 이벤트 처리를 완료하기 전에 두 번째로 전화를 걸 수 있는 타이머 알림의 재동기성.예: 다음 질문을 참조하십시오.시스템을 사용하여 스레드 안전 실행.스레드화.타이머 및 모니터
그의 책 "CLR Via C#"에서 Jeff Richer는 다음과 같이 사용하지 않습니다.System.Timers.Timer
는 이타머에파서습니다었생되는이▁is다▁from에서 파생되었습니다.System.ComponentModel.Component
Visual Studio의 디자인 표면에서 사용할 수 있습니다.따라서 디자인 표면에 타이머를 원하는 경우에만 유용합니다.
그는 사용하는 것을 선호합니다.System.Threading.Timer
스레드 풀 스레드의 백그라운드 작업에 사용할 수 있습니다.
이에 대한 Microsoft의 정보(MSDN 관련 비고 참조):
- 시스템. 타이머.타이머 - 이벤트를 실행하고 정기적으로 하나 이상의 이벤트 싱크에서 코드를 실행합니다.클래스는 멀티스레드 환경에서 서버 기반 또는 서비스 구성 요소로 사용하기 위한 것으로, 사용자 인터페이스가 없고 런타임에 표시되지 않습니다.
- 시스템. 스레딩.정기적으로 스레드 풀 스레드에서 단일 콜백 메서드를 실행하는 타이머입니다.콜백 방법은 타이머가 인스턴스화될 때 정의되며 변경할 수 없습니다.시스템처럼.Timers.Timer 클래스. 이 클래스는 멀티스레드 환경에서 서버 기반 또는 서비스 구성 요소로 사용하기 위한 것으로, 사용자 인터페이스가 없으며 런타임에 표시되지 않습니다.
- 시스템. 윈도우.Forms.Timer(.NET Framework 전용)는 이벤트를 실행하고 하나 이상의 이벤트 싱크에서 정기적으로 코드를 실행하는 윈도우즈 Forms 구성 요소입니다.이 구성 요소에는 사용자 인터페이스가 없으며 단일 스레드 환경에서 사용하도록 설계되었으며 UI 스레드에서 실행됩니다.
- 시스템. 웹.UI.Timer(.NET Framework 전용)는 비동기식 또는 동기식 웹 페이지 포스트백을 정기적으로 수행하는 ASP.NET 구성 요소입니다.
라고 말하는 것은 흥미로운 일입니다.System.Timers.Timer
. 1더 . 2 2에서되었습니다.NET Core 1.0에서는 더 이상 사용되지 않지만 .NET Core 2.0(/.NET Standard 2.0)에서 다시 구현되었습니다.입니다.NET Standard 2.0 표준.NET Framework에서 전환하는 것이 가능한 한 쉬워야 한다는 것이었고, 이는 아마도 이 프레임워크가 다시 등장한 이유일 것입니다.
더 이상 사용되지 않을 경우 .NET Portability Analyzer Visual Studio Add-In을 사용할 것을 권장합니다.System.Threading.Timer
대신.
마이크로소프트가 선호하는 것처럼 보입니다.System.Threading.Timer
앞에System.Timers.Timer
.
EDIT NOTE 2018-11-15: .NET Core 1.0에 대한 이전 정보가 더 이상 유효하지 않기 때문에 답변을 변경해야 했습니다.
중요한 중 할 수 입니다.System.Timers.Timer
침묵으로 예외를 삼키는 반면,System.Threading.Timer
안 합니다.
예:
var timer = new System.Timers.Timer { AutoReset = false };
timer.Elapsed += (sender, args) =>
{
var z = 0;
var i = 1 / z;
};
timer.Start();
대
var timer = new System.Threading.Timer(x =>
{
var z = 0;
var i = 1 / z;
}, null, 0, Timeout.Infinite);
MSDN에서 간단한 비교 결과를 찾았습니다.
.NET Framework 클래스 라이브러리에는 Timer라는 이름의 네 개의 클래스가 포함되어 있으며, 각 클래스는 서로 다른 기능을 제공합니다.
System.Timers.Timer
이벤트를 실행하고 하나 이상의 이벤트 싱크에서 정기적으로 코드를 실행합니다.클래스는 멀티스레드 환경에서 서버 기반 또는 서비스 구성 요소로 사용하기 위한 것으로, 사용자 인터페이스가 없고 런타임에 표시되지 않습니다.
System.Threading.Timer
스레드 풀 스레드에서 정기적으로 단일 콜백 메서드를 실행합니다.콜백 방법은 타이머가 인스턴스화될 때 정의되며 변경할 수 없습니다.시스템처럼.타이머. 타이머 클스래. 이 클래스는 멀티스레드 환경에서 서버 기반 또는 서비스 구성 요소로 사용하기 위한 것으로, 사용자 인터페이스가 없으며 런타임에 표시되지 않습니다.
System.Windows.Forms.Timer
이벤트를 실행하고 정기적으로 하나 이상의 이벤트 싱크에서 코드를 실행하는 Windows Forms 구성 요소입니다.이 구성 요소에는 사용자 인터페이스가 없으며 단일 스레드 환경에서 사용하도록 설계되었습니다.
System.Web.UI.Timer
정기적으로 비동기 또는 동기식 웹 페이지 포스트백을 수행하는 ASP.NET 구성 요소입니다.
MSDN: MSDN:System.Threading.Timer
는 콜백 메서드를 사용하고 스레드 풀 스레드에 의해 제공되는 단순하고 가벼운 타이머입니다.콜백은 사용자 인터페이스 스레드에서 발생하지 않으므로 Windows Forms와 함께 사용하는 것이 좋습니다. System.Windows.Forms.Timer
Windows Forms와 함께 사용하는 것이 좋습니다.기능의 경우에는 " " " " " " " " " " " " " " " " 을 사용하는 것을 해 볼 수 .System.Timers.Timer
이벤트를 발생시키고 추가 기능을 제공합니다.
두 클래스는 기능적으로 동등합니다. 단,System.Timers.Timer
ISSynchronize를 통해 모든 타이머 만료 콜백을 호출하는 옵션이 있음SynchronizingObject를 설정하여 호출합니다.그렇지 않으면 두 타이머 모두 스레드 풀 스레드에서 만료 콜백을 호출합니다.
을 끌 때System.Timers.Timer
Windows Forms 설계 지표면에서 Visual Studio는 SynchronizingObject를 양식 개체로 설정하여 UI 스레드에서 모든 만료 콜백을 호출합니다.
다른 사람들이 MS Docs에 대한 링크를 언급했듯이, 한 가지 주요 차이점은System.Timers.Timer
그리고.System.Threading.Timer
은 것은입니다.System.Threading.Timer
한 번 정의된 단일 콜백 방법을 실행합니다.System.Timers.Timer
에서는 이벤트에 반응하므로 제거할 수 있는 여러 가입자를 지원합니다.
했듯이, 위서언바같와이한급에,같이,System.Timers.Timer
을 사용하고 .System.Threading.Timer
내부적으로 Enable=false를 사용하여 내부 타이머를 배치하고 Enable=true / Start(): https://source.dot.net/ #System.ComponentModel.TypeConverter/System/Timers/Timer.cs 에서 타이머를 다시 생성합니다.
언급URL : https://stackoverflow.com/questions/1416803/system-timers-timer-vs-system-threading-timer
'programing' 카테고리의 다른 글
추상 수업을 만드는 것이 가능합니까? (0) | 2023.06.01 |
---|---|
iPhone의 Facebook 앱처럼 분할 보기 (0) | 2023.06.01 |
Azure에서 환경 변수를 정의하는 방법 및 위치 (0) | 2023.06.01 |
파이썬의 헬로 월드 (0) | 2023.06.01 |
변수가 Ruby의 문자열인지 확인합니다. (0) | 2023.06.01 |