CPU, 메모리 사용량, 스레드 풀 사용량-ASP NET Core Identity 확인되지 않은 메일 사용자 삭제 처리-인앱 또는 별도 앱?

Aug 19 2020

더 적합한 솔루션이 무엇인지 궁금합니다. 확인 메일을 보낸 후 7 일 동안 확인되지 않은 등록 사용자를 확인하고 삭제하는 로봇을 구현해야합니다. (사용자가 자신의 계정을 확인하지 않으면 데이터베이스에서 사용자를 삭제하고 싶습니다.) 세 가지 방법에 대해 생각했습니다.

  1. ASP NET Core 앱에서 대리자를 직접 구현하고 24 시간 절전 모드의 루프에서 비동기 작업으로 실행합니다.
  2. 24 시간 절전으로 루프에서 실행되는 콘솔 앱을 만듭니다.
  3. 정기적으로 타사 소프트웨어 (예 : Cron 또는 TaskScheduler)에 의해 시작되는 콘솔 앱을 만듭니다.

다음 중 CPU 및 메모리 사용량에 가장 적은 영향을 미치는 방법은 무엇입니까?
또한 스레드 풀은 취할 수있는 양이 제한되어 있고, 로봇이 많을수록 ASP 넷 사이트에 액세스하려는 사람들이 스레드를 적게 사용할 수 있습니다. 맞습니까?
그리고 나의 마지막 질문은> 그렇게 오랫동안 Thread.Sleep을 사용하는 것이 좋은 생각입니까? 뭔가 정말 그렇지 않다는 말이 있습니다. 반면에 몇 달 또는 몇 년 동안 실행될 ASP입니다.

어쨌든 나는 모든 것을 하나의 앱에 넣는 비전을 좋아합니다 (하나의 파일 내에서 구성 할 수 있으며 모두 한 번에 시작됨). 다른 한편으로는 그것이 매우 훌륭한 아이디어가 아니라는 것을 말해줍니다.

답변

2 JonasH Aug 21 2020 at 18:48

작업이 실제로 실행 중일 때 메모리 및 프로세스 사용량이 작업에 필요한 모든 것에 의해 지배 될 것으로 예상하고 각 방법에 대해 비교할 수 있어야합니다. 따라서 실행 중이 아닐 때 리소스 사용량을 보는 것이 더 흥미로울 것입니다.

  1. 진행 중, 타이머 (또는 await Task.Delay(..)루프) 사용

이것은 타이머 또는 비동기 상태 머신을위한 메모리와 코드를위한 추가 메모리 만 필요합니다. 이것은 아마도 몇 킬로바이트 정도로 상당히 작아야합니다. 프로세서 시간과 스레드가 유휴 상태에서 사용되지 않습니다. 이것은 큰 데이터 구조를 보유하지 않는다고 가정합니다.

  1. 별도의 영구 콘솔 프로세스에서

이것은 .Net 런타임을 위해 몇 MB의 메모리를 사용하고 코드와 데이터를 위해 약간의 추가 메모리를 사용합니다. 실제로 컴퓨터의 메모리가 부족하면 메모리가 디스크로 페이징 될 것으로 예상합니다. 유휴 상태에서는 프로세서 시간이 사용되지 않습니다.

  1. 별도의 예약 된 콘솔 프로세스에서

이것은 스케줄러 오브젝트에 대한 메모리 만 사용하며 이는 최소한이어야합니다. 분명히 유휴 상태에서는 프로세서 시간이나 스레드가 사용되지 않습니다.

요약

별도의 프로세스를 예약하면 최소한의 리소스가 사용됩니다. 그러나 모든 방법은 유휴 상태에서 상당히 적은 양의 리소스를 사용해야합니다. 따라서 유지 및 / 또는 배포가 가장 쉬운 것과 같은 다른 기준에 따라 선택해야한다고 주장합니다.

스레드 풀은 필요한 경우 더 많은 스레드를 할당합니다. 스레드는 일반적으로 실제로 작업을 수행 할 때만 사용해야하며 (즉 , await task대신 사용 task.Wait()) 하드웨어 스레드보다 훨씬 더 많은 스레드 풀 스레드를 갖게됩니다. 평소보다 훨씬 많은 수의 스레드를 관찰 한 경우에만 이에 대해 걱정할 것입니다.

Thread.Sleep가능 하면 피할 것 입니다. 타이머 또는 await Task.Delay일반적으로 더 적합합니다.