2012-02-07 62 views
1

如果我部署一个C#控制台应用程序,它具有以下功能:C#多控制台应用程序运行,并隔离

  • 读取消息(ActiveMQ的)
  • 处理邮件内容
  • 写入结果到数据库(SQL Server )

会有多次运行此问题,例如如果我创建了一个批处理文件并运行了100个实例呢?考虑到每个实例将使用相同的共享DLL例如Apache.NMS.ActiveMQ。

另一种选择是多次部署应用程序,但我宁愿不必管理重复的文件夹。我现在也避开线程,但这将是未来进一步发展的一个选择。

只是想澄清这些DLL会发生什么,并检查是否不存在线程类型冲突一个实例将另一个实例的处理结果写入数据库...

+0

你想通过运行同一个应用程序的100个实例来实现什么?所有实例是以相同的配置运行还是完全相同? – Glenn 2012-02-07 12:48:42

+0

有很多方法可以让多个进程从相同的消息队列中吸入并更新相同的数据库表。只有其中的一个进程崩溃应该是相当灾难性的,不可恢复的数据丢失。但试试吧。至少你会知道它是否运行得更快。这是不太可能的。 – 2012-02-07 12:56:39

+0

@Glenn完全相同,但尝试的原因是这个想法最终将使用Ninject加载到不同的DLL中,以在运行时实现相同的接口。 – finoutlook 2012-02-07 16:55:56

回答

2

不,如您所描述的,将相同的DLL文件加载到多个进程中将没有问题。如果进程需要独占访问共享资源(如文件),则只会遇到运行同一应用程序的多个实例的问题。关于写入数据库,只要您设计您的应用程序,以便多个客户端可以写入数据而不会覆盖数据或导致与数据的域完整性不一致,那么就没有问题。但是,如果是需要的并发性,我强烈建议您考虑让应用程序为多线程,如果是需要的隔离,则强烈建议您使用应用程序域。就资源而言,运行多个进程比这两个选项中的任何一个都要昂贵得多。

+0

感谢您的回答,我将着眼于AppDomains。我怀疑我实际上会多次放弃部署相同应用程序的路线,但只是想知道这样做的问题。 – finoutlook 2012-02-07 16:57:03

相关问题