微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我想知道什么是更合适的解决方案。 我需要实现用于检查和删除未确认注册用户的机器人,例如发送确认邮件后的7天。 (如果用户未确认其帐户,我想从数据库删除用户)。 我考虑了三种方式:

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

以下哪种方式对cpu和内存使用的影响最小?
此外,线程池的使用量有限,机器人越多,尝试访问我的ASP网站的人线程就越少,我是否正确?
我的最后一个问题>这么长时间使用Thread.Sleep是个好主意吗?有人告诉我,事实并非如此。另一方面,它是一个ASP,它将运行数月甚至数年。

无论如何,我喜欢在一个应用程序中拥有全部功能的愿景(可以在一个文件中进行配置,并且所有功能可以一次启动)。另一方面,有人告诉我这不是一个很棒的主意。

解决方法

当任务实际运行时,我希望内存和进程的使用受任务所需的一切支配,并且每种方法都应具有可比性。因此,在不运行时查看资源使用情况会更有趣。

  1. 正在使用计时器(或await Task.Delay(..)循环)

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

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

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

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

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

摘要

安排一个单独的过程将使用最少的资源。但是,所有方法在空闲时都应使用相当少量的资源。因此,我认为应该根据其他标准进行选择,例如最容易维护和/或部署的标准。

如果需要,线程池将分配更多线程。通常,仅应在实际正在做某事时使用线程(即,使用await task而不是task.Wait()),并且线程池线程数将比硬件线程数多得多。如果我观察到的线程数比平时高得多,我只会担心这一点。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。