CPU, 메모리 사용량, 스레드 풀 사용량-ASP NET Core Identity 확인되지 않은 메일 사용자 삭제 처리-인앱 또는 별도 앱?
더 적합한 솔루션이 무엇인지 궁금합니다. 확인 메일을 보낸 후 7 일 동안 확인되지 않은 등록 사용자를 확인하고 삭제하는 로봇을 구현해야합니다. (사용자가 자신의 계정을 확인하지 않으면 데이터베이스에서 사용자를 삭제하고 싶습니다.) 세 가지 방법에 대해 생각했습니다.
- ASP NET Core 앱에서 대리자를 직접 구현하고 24 시간 절전 모드의 루프에서 비동기 작업으로 실행합니다.
- 24 시간 절전으로 루프에서 실행되는 콘솔 앱을 만듭니다.
- 정기적으로 타사 소프트웨어 (예 : Cron 또는 TaskScheduler)에 의해 시작되는 콘솔 앱을 만듭니다.
다음 중 CPU 및 메모리 사용량에 가장 적은 영향을 미치는 방법은 무엇입니까?
또한 스레드 풀은 취할 수있는 양이 제한되어 있고, 로봇이 많을수록 ASP 넷 사이트에 액세스하려는 사람들이 스레드를 적게 사용할 수 있습니다. 맞습니까?
그리고 나의 마지막 질문은> 그렇게 오랫동안 Thread.Sleep을 사용하는 것이 좋은 생각입니까? 뭔가 정말 그렇지 않다는 말이 있습니다. 반면에 몇 달 또는 몇 년 동안 실행될 ASP입니다.
어쨌든 나는 모든 것을 하나의 앱에 넣는 비전을 좋아합니다 (하나의 파일 내에서 구성 할 수 있으며 모두 한 번에 시작됨). 다른 한편으로는 그것이 매우 훌륭한 아이디어가 아니라는 것을 말해줍니다.
답변
작업이 실제로 실행 중일 때 메모리 및 프로세스 사용량이 작업에 필요한 모든 것에 의해 지배 될 것으로 예상하고 각 방법에 대해 비교할 수 있어야합니다. 따라서 실행 중이 아닐 때 리소스 사용량을 보는 것이 더 흥미로울 것입니다.
- 진행 중, 타이머 (또는
await Task.Delay(..)
루프) 사용
이것은 타이머 또는 비동기 상태 머신을위한 메모리와 코드를위한 추가 메모리 만 필요합니다. 이것은 아마도 몇 킬로바이트 정도로 상당히 작아야합니다. 프로세서 시간과 스레드가 유휴 상태에서 사용되지 않습니다. 이것은 큰 데이터 구조를 보유하지 않는다고 가정합니다.
- 별도의 영구 콘솔 프로세스에서
이것은 .Net 런타임을 위해 몇 MB의 메모리를 사용하고 코드와 데이터를 위해 약간의 추가 메모리를 사용합니다. 실제로 컴퓨터의 메모리가 부족하면 메모리가 디스크로 페이징 될 것으로 예상합니다. 유휴 상태에서는 프로세서 시간이 사용되지 않습니다.
- 별도의 예약 된 콘솔 프로세스에서
이것은 스케줄러 오브젝트에 대한 메모리 만 사용하며 이는 최소한이어야합니다. 분명히 유휴 상태에서는 프로세서 시간이나 스레드가 사용되지 않습니다.
요약
별도의 프로세스를 예약하면 최소한의 리소스가 사용됩니다. 그러나 모든 방법은 유휴 상태에서 상당히 적은 양의 리소스를 사용해야합니다. 따라서 유지 및 / 또는 배포가 가장 쉬운 것과 같은 다른 기준에 따라 선택해야한다고 주장합니다.
스레드 풀은 필요한 경우 더 많은 스레드를 할당합니다. 스레드는 일반적으로 실제로 작업을 수행 할 때만 사용해야하며 (즉 , await task
대신 사용 task.Wait()
) 하드웨어 스레드보다 훨씬 더 많은 스레드 풀 스레드를 갖게됩니다. 평소보다 훨씬 많은 수의 스레드를 관찰 한 경우에만 이에 대해 걱정할 것입니다.
Thread.Sleep
가능 하면 피할 것 입니다. 타이머 또는 await Task.Delay
일반적으로 더 적합합니다.