C#控制台应用程序线程?

3
我即将编写一个控制台应用程序,每周日凌晨2点运行一次。它将查询一个SQL服务器数据库,进行一些计算,然后将结果写入新的数据库。
由于要处理数十万条记录,所以需要花费几个小时才能完成。
我将创建一个C#控制台应用程序,并使用Windows计划任务来启动它。
我的问题是:
1)您认为这是一个好方法吗? 2)过去,类似的控制台应用程序在不断循环时会将CPU使用率提高到100%。有没有良好的方法来正确处理线程等?
在开始之前,任何建议都将非常感谢。
4个回答

1

一般来说,这是一个不错的方法,因为它会在非高峰/非工作时间安排CPU和数据密集型进程,以便用户体验和应用程序可用性不会受到影响。唯一需要考虑的是-你的工作进程可能需要多长时间?如果它将运行30-40小时,那么可能会影响周一的工作时间。

至于线程,只有在计算需要一些时间且不在数据库服务器上进行时,多个线程才有帮助。因此,在这种情况下,当一个线程正在等待来自数据库的数据时,其他线程可以使用CPU。但是,多线程意味着您应该能够水平地划分数据,以便每个线程可以处理不同的记录集。


谢谢,我很感激你的反馈。 - Mr T

0

如果您担心您的应用程序在干扰其他用户/进程时仍然继续运行,您可以以低优先级启动任务。这样,当其他CPU密集型进程运行时,您的进程将被放在后座。

就多线程而言,这取决于您的情况。如果您有多个核心/CPU可用,并且如果您能够将问题分解为并行任务,则可能能够利用多个线程。同时,如果您有多个核心/CPU可用,则单线程应用程序占用所有CPU的风险较小,因为其他进程将被重定向到使用其他核心/CPU。

我曾经使用过您的策略,在非高峰时间安排控制台应用程序来完成脏活累活。到目前为止,我没有遇到任何问题,也没有采取分割任务和多线程的方法。


0

你可以看一下Tasks.Parallel类(更多信息在这里)。我最近实现了类似的功能,并遇到了相同的问题。幸运的是,我有一个专用服务器来处理这个问题...


0

如果你的CPU占用率达到了100%,你应该使用分页和批处理来最小化每个周期应用程序所做的工作量。例如,不要从数据库中获取所有记录,而是获取前一百万条记录,进行处理,然后获取下一百万条记录等。

如果一个线程消耗了所有的CPU周期,创建多个线程只会增加开销。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接