gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 09:04:26 25 4
gpt4 key购买 nike

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

  • 直接在 ASP NET 核心应用程序中实现委托(delegate)并将其运行为
    循环中的异步任务,24 小时 sleep 。
  • 创建控制台应用程序
    它将循环运行,24 小时 sleep
  • 创建控制台应用程序
    由第三方软件定期启动
    (例如 Cron 或 TaskScheduler)

  • 以下哪种方式对 CPU 和内存使用的影响最小?

    此外,线程池的数量有限,机器人越多,试图访问我的 ASP 网站的人的线程就越少,对吗?

    我的最后一个问题> Thread.Sleep 这么长时间是个好主意吗?有些东西告诉我它真的不是。另一方面,它是一个将运行数月甚至数年的 ASP。
    无论如何,我喜欢在一个应用程序中实现所有功能的愿景(可以在一个文件中进行配置,并立即启动)。另一方面,有些事情告诉我这不是一个 super 好主意。

    最佳答案

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

  • 在处理中,使用计时器(或 await Task.Delay(..) 循环)

  • 这只需要用于计时器或异步状态机的内存,以及用于代码的一些额外内存。这应该相当小,可能只有几千字节。空闲时不会使用处理器时间和线程。这假设您不持有任何大型数据结构。
  • 在单独的持久控制台进程中

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

  • 这只会消耗调度程序对象的内存,这应该是最小的。显然,空闲时不会使用处理器时间或线程。
    总结
    调度一个单独的进程将使用最少的资源。但是所有方法在空闲时都应该使用相当少量的资源。所以我认为应该根据其他标准做出选择,比如最容易维护和/或部署的标准。
    如果需要,线程池将分配更多线程。线程通常只能在它们实际做某事时使用(即使用 await task 而不是 task.Wait() ),并且您将拥有比硬件线程更多的线程池线程。如果我观察到的线程数量比平时多得多,我只会担心这一点。
    我会避免 Thread.Sleep如果可能的话。计时器或 await Task.Delay通常会更合适。

    关于c# - CPU、内存使用、线程池使用 - ASP NET 核心身份未确认邮件用户删除处理 - 在应用程序或单独的应用程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63484503/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com