2012-02-07 2 views
1

가 :C#을 여러 콘솔 응용 프로그램 실행 및 분리가

  • 메시지를 읽고 (ActiveMQ를)
  • 가 데이터베이스에 결과를 기록 메시지 내용을 처리 (SQL 서버)

이 여러 번 실행하는 데 문제가 있습니까 예 : 배치 파일을 만들고 100 개의 인스턴스를 실행하면 어떻게됩니까? 각 인스턴스가 동일한 공유 DLL을 사용한다는 점에서 충돌이 발생합니까? Apache.NMS.ActiveMQ.

다른 옵션은 앱을 여러 번 배포하는 것이지만 중복 된 폴더를 관리하지 않아도됩니다. 나는 또한 순간 스레딩을 피하고 있지만 향후 개발을위한 옵션이 될 것입니다.

해당 DLL에 어떤 일이 발생하는지 명확히하고 스레딩 유형 충돌이 없는지 확인하십시오. 다른 인스턴스의 처리 결과를 데이터베이스에 쓰는 한 인스턴스 ...

+0

같은 응용 프로그램의 100 개의 인스턴스를 실행하면서 무엇을 달성하고 싶습니까? 모든 인스턴스가 동일한 구성으로 실행 중이거나 완전히 동일합니까? – Glenn

+0

동일한 메시지 대기열에서 빠져 나와 동일한 dbase 테이블을 업데이트하는 여러 프로세스에서 문제가되는 방법은 많습니다. 프로세스 중 하나가 충돌하는 경우 복구 불가능한 데이터 손실로 인해 심각한 재앙을 당해야합니다. 그러나 그것을 시도하십시오. 적어도 더 빨리 실행되는지 알 수 있습니다. 그럴 가능성은 희박합니다. –

+0

@Glenn 완전히 동일하지만, 시도하는 이유는 결국 Ninject를 사용하여 런타임에 동일한 인터페이스를 구현하는 다른 DLL에서로드하게됩니다. – finoutlook

답변

2

아니요. 설명대로 동일한 DLL 파일을 여러 프로세스로로드해도 아무런 문제가 없습니다. 프로세스가 파일 같은 공유 리소스에 독점적으로 액세스해야하는 경우에만 동일한 응용 프로그램의 여러 인스턴스를 실행하는 데 문제가있을 수 있습니다. 데이터베이스 작성과 관련하여 여러 클라이언트가 데이터를 덮어 쓰지 않고 데이터를 작성할 수 있도록 응용 프로그램을 설계하거나 데이터의 도메인 무결성과 관련하여 일종의 불일치가 발생하면 문제가 발생하지 않습니다.

그러나 필자는 필요할 때 동시성이 필요한 경우 응용 프로그램을 멀티 스레드로 만들 것을 권장합니다. 필요한 경우 격리하는 경우 응용 프로그램 도메인을 참조하십시오. 여러 프로세스를 실행하는 것은이 두 옵션 중 하나보다 리소스 측면에서 훨씬 비쌉니다.

+0

답변을 주셔서 감사합니다. AppDomains를 살펴 보겠습니다. 나는 실제로 동일한 애플리케이션을 여러 번 배포하는 경로를 따르지 않을 것이지만 그로 인해 문제를 알고 싶을뿐입니다. – finoutlook

관련 문제