为多个实例构建C#控制台应用程序

为多个实例构建C#控制台应用程序,c#,console-application,C#,Console Application,我正在构建一个控制台应用程序,将数据导入数据库。这将根据存在的输入CSV文件每小时运行一次。该应用程序还需要重新用于同一服务器上的其他数据库导入,例如,同一.exe文件可能有多达20个实例,每个实例都有自己的单独配置 目前,我有一个基本应用程序,它通过args传递配置文件的位置,因此可以根据需要使用它的应用程序对其进行调整。它还通过交易进行进口,一切正常 我担心的是,每小时有20个相同的.exe文件实例在同一个盒子上运行,这可能会导致CPU的最大输出 我能做些什么来解决这个问题?线程化会有帮助吗

我正在构建一个控制台应用程序,将数据导入数据库。这将根据存在的输入CSV文件每小时运行一次。该应用程序还需要重新用于同一服务器上的其他数据库导入,例如,同一.exe文件可能有多达20个实例,每个实例都有自己的单独配置

目前,我有一个基本应用程序,它通过args传递配置文件的位置,因此可以根据需要使用它的应用程序对其进行调整。它还通过交易进行进口,一切正常

我担心的是,每小时有20个相同的.exe文件实例在同一个盒子上运行,这可能会导致CPU的最大输出


我能做些什么来解决这个问题?线程化会有帮助吗?

每个可执行文件都将在它自己的进程中运行,因此,它们都有自己的线程。取决于每个任务的处理器密集程度,CPU可能会最大化,但这并不一定需要关注。如果您担心并发负载,那么最好的方法可能是错开进程的调度,以使它们同时运行的数量最少。

每个可执行文件都将在其自己的进程中运行,因此也会在其自己的线程中运行。取决于每个任务的处理器密集程度,CPU可能会最大化,但这并不一定需要关注。如果您担心并发负载,那么最好的方法可能是错开进程的调度,使它们同时运行的数量最少。

不,这不是线程问题


只需在应用程序开始时创建一个名为的系统范围的。创建互斥时,请查看它是否已经存在。如果是,则意味着有另一个应用程序实例正在运行。此时,您可以(通过控制台或消息框)给用户一条消息,说明另一个实例已在运行,然后您可以终止应用程序。

不,这不是线程问题



只需在应用程序开始时创建一个名为
的系统范围的。创建互斥时,请查看它是否已经存在。如果是,则意味着有另一个应用程序实例正在运行。此时,您可以(通过控制台或消息框)给用户一条消息,说明另一个实例已经在运行,然后您可以终止应用程序。

为什么不创建一个可以处理多个配置的实例呢?维护和控制起来似乎容易多了。

为什么不创建一个可以处理多个配置的实例呢?看起来维护和控制起来要容易得多。

我意识到这个线程很旧,但我的项目也有同样的问题。我建议使用MSMQ按顺序处理作业。

我意识到这个线程非常旧,但我的项目中也有同样的问题。我建议使用MSMQ按顺序处理作业。

这并不能完全回答问题。这并不能保证只有一个实例在运行。我看不到任何地方提到过这个要求-这个问题似乎是出于假设的观点,即将有多个exe实例在运行-或者我遗漏了什么?对不起,我应该把这说得更清楚一点。我确实需要多个实例,但我不希望服务器陷入停顿,因为我有太多进程在运行。我同意@AdamRaplh。做一些测试,找出每个实例需要多少CPU和内存。然后错开开始时间,升级服务器,优化代码,或者三者兼而有之。感谢您的回复。我将回顾CPU处理器和内存使用情况,以及错开启动时间。这并不能完全回答问题。这并不能保证只有一个实例在运行。我看不到任何地方提到过这个要求-这个问题似乎是出于假设的观点,即将有多个exe实例在运行-或者我遗漏了什么?对不起,我应该把这说得更清楚一点。我确实需要多个实例,但我不希望服务器陷入停顿,因为我有太多进程在运行。我同意@AdamRaplh。做一些测试,找出每个实例需要多少CPU和内存。然后错开开始时间,升级服务器,优化代码,或者三者兼而有之。感谢您的回复。我将检查CPU处理器和内存的使用情况以及错开启动时间。这将只强制执行一个这样的进程,但如果处理器不是这里的瓶颈,那么这将降低性能。任何使用互斥锁或锁都会降低性能。问题是需要一种方法来停止多个实例,这是一种众所周知且经常使用的方法。这将只强制执行一个这样的进程,但如果处理器不是这里的瓶颈,那么这将降低性能。使用互斥锁或锁会降低性能。问题是需要一种方法来停止多个实例,这是一种众所周知且经常使用的方法。同时运行20个进程不是问题。无论如何,这可能都是完全受I/O限制的。不,但是将CPU处理推到100%可能会导致在同一服务器上运行的其他进程出现问题。这是在运行IIS的服务器上运行的,因此影响可能是IIS运行较慢。CPU没有可以熔断的保险丝。同时运行20个进程不是问题。无论如何,这可能都是完全受I/O限制的。不,但是将CPU处理推到100%可能会导致在同一服务器上运行的其他进程出现问题。这是在运行IIS的服务器上运行的,因此影响可能是IIS运行较慢。单个实例的问题是该进程可能会运行几分钟。如果有20个不同的数据库需要导入,那么您需要对每个数据库事务进行排队