CPU、内存使用、线程池使用 - ASP NET 核心身份未确认邮件用户删除处理 - 在应用程序中还是单独的应用程序中?

CPU, memory usage, thread pool usage - ASP NET core Identity not confirmed mail users delete handling - In app or separate app?

我想知道什么是更合适的解决方案。 我需要实施机器人来检查和删除未确认的注册用户,例如发送确认邮件后 7 天。 (如果用户不确认 his/her 帐户,我想从数据库中删除该用户)。 我想了 3 种方法:

  1. 直接在 ASP NET 核心应用程序中实现委托,运行 作为 24 小时睡眠循环中的异步任务。
  2. 创建控制台应用程序 这将 运行 循环 24 小时睡眠
  3. 创建控制台应用程序 由第三方软件定时启动 (例如 Cron 或 TaskScheduler)

以下哪种方式对 CPU 和内存使用的影响最小?
线程池的数量也有限,机器人越多,试图访问我的 ASP 网站的人的线程就越少,我说得对吗?
我的最后一个问题 > 这么长时间 Thread.Sleep 是个好主意吗?有些东西告诉我它真的不是。另一方面,它是一个 ASP,将 运行 持续数月甚至数年。

无论如何,我喜欢将所有功能都集中在一个应用程序中的愿景(可以在一个文件中配置并且所有功能都同时启动)。另一方面,有些事情告诉我这不是一个好主意。

当任务实际上是 运行 时,我希望内存和进程使用由任务所需的任何内容决定,并且每种方法都应该具有可比性。所以在不是运行.

的时候看资源使用应该会更有趣
  1. 正在使用定时器(或 await Task.Delay(..) 循环)

这只需要用于定时器或异步状态机的内存,以及用于代码的一些额外内存。这应该相当小,也许只有几千字节。空闲时不会使用处理器时间和线程。这假设您不持有任何大型数据结构。

  1. 在单独的持久控制台进程中

这将为 .Net 运行时使用几 MB 的内存,并为代码和数据使用一些额外的内存。实际上,如果计算机内存不足,我希望将内存分页到磁盘。空闲时不会使用处理器时间。

  1. 在单独的预定控制台进程中

这只会消耗调度程序对象的内存,而且应该是最小的。显然,空闲时不会使用处理器时间或线程。

总结

安排一个单独的进程会使用最少的资源。但是所有方法在空闲时都应该使用相当少量的资源。所以我认为应该根据其他标准做出选择,比如最容易维护的 and/or deploy.

如果需要,线程池将分配更多线程。一般来说,线程应该只在它们实际做某事时使用(即使用 await task 而不是 task.Wait() ),并且您将拥有比硬件线程更多的线程池线程。如果我观察到的线程数比平时多得多,我只会担心这一点。

如果可能,我会避免Thread.Sleep。计时器或 await Task.Delay 通常更合适。