2009-05-12 6 views
0

나는 SQL Server과 대화하는 프로젝트를 진행하고 있으며 대부분의 백엔드 코드는 C++입니다.C#/.Net 또는 C++과 함께 사용해야합니까?

소수의 유체가 캐리어로 적재되는 동안 유체의 흐름을 제어하는 ​​어플리케이션입니다. 유체 흐름을 제어하는 ​​제어기와 통신하는 백엔드 모듈 중 일부는 C++입니다. 메모리 누수 및 기타 버그가 있으므로 .Net으로 마이그레이션하려고했습니다.

내가 이해하는 바에는 .Net백엔드 모듈에 사용하면 성능이 떨어집니다. 그래서 내 의견은 이러한 백 엔드 모듈을 .NET으로 변환하지 않고 C++ 자체의 문제를 해결하는 것이 었습니다.

토론중인 코드는 컨트롤러의 펌웨어와 상호 작용하는 응용 프로그램입니다. 기본적으로 몇 가지 명령이 필요하며 컨트롤러에서 응답을받습니다. 이 코드에는 UI가없고 동일한 코드가 SQL과 상호 작용하여 데이터를 업데이트합니다. 둘 다 하나의 부분입니다 exe ​​.

.Net은 성능이 엄격하지 않을 것으로 예상되는 경우 양호한 것으로 여겨집니다. 새로운 코드가 작성되어야하고 특히 UI의 디자인과 관련된 경우에 적합했을 것입니다. 또 다른 생각은 .Net은 상위 계층에는 적합하지만 다중 계층 아키텍처에서는 하위 계층에는 적합하지 않습니다.

다른 관점에서 다른 사람들의 의견을 알고 싶습니다. 고려해야 할 측면 중 일부는 다음과 같습니다

미래

  • 등의 코드
  • 유지 보수
  • 마이그레이션 관련 위험

    • 속도를 기존 코드를 재 작성의 각도에서 의견을주십시오. 우리가 그것을 결정한다면, C++ 라인 변환을 일대일 C#으로 할 것입니다.

  • +2

    O.K. 그러나 질문은 무엇인가? 귀하의 경우에는 C++이 갈 길이라고 생각합니다. 메모리 누수 나 버그가 있기 때문에 C#을 사용하지 않고 생각할 수 없습니다. 제대로 테스트하지 않으면 동일한 버그 (또는 더 나쁜)가 발생할 수 있습니다. C++ 또는 C#은 중요하지 않습니다. 메모리 문제의 경우 'valgrind'(google for more)와 같은 도구를 사용하여 코드를 프로파일하십시오. – Abhay

    +0

    .NET 응용 프로그램이 잘못 작성된 C++ 응용 프로그램보다 더 잘 실행될 수 있다는 것은 사실입니다. 그러나 여기서는 C++과 같은 방법이 사용됩니다. 특히 직접적인 하드웨어 상호 작용을 참조하는 것이 좋습니다. .NET은 메모리 누수가있을 수 있음을 기억하십시오 (예 : 콜렉션에 무언가를 추가하고 잊어 버림). 그리고 Abhay와 확실히 동의합니다. 왜냐하면/당신 회사의/C++이 지금까지 가난했기 때문에 C++에 보석을해서는 안됩니다. –

    +0

    나는 "드라이버"가 무슨 뜻인지 몰라 : 보통 "드라이버"와 "펌웨어와의 상호 작용"은 '커널 모드'소프트웨어를 의미하지만, SQL과 상호 작용하는 커널 모드 드라이버에 대해서도 들어 보지 못했습니다. – ChrisW

    답변

    0

    모든 언어는 자신의 방법으로 특별하다, 당신은 분명히 기존의 C++ 코드로 유일한 문제는 메모리 누수 인 언어가 시나리오

    +0

    하지만 그건 정확히 내가 알고 싶은 것입니다. 나는 우리가 고려해야 할 다른 측면이 무엇인지 알고 싶습니다. –

    +0

    플랫폼 성능 자원 그리고 더 많은 지금 당신은 당신이 다음 시스템 상호 작용을위한 창문을 설계하고 잘 경우 모노 같은 소프트웨어의 어떤 종류를 사용하지 않는 한 캔트 사용 C#을보다은 diff OS 용 응용 프로그램을 만들려고하는 경우 VC++가 최선의 선택입니다. – Searock

    +0

    가까운 장래에 다른 운영 체제가 나타나지 않습니다. Windows에서만 가능합니다 (XP 및 이후 버전). –

    1

    에 가장 적합한하는 알아봐야합니다.

    저에게 C#으로 모든 것을 다시 작성하는 것은 불충분 한 이유입니다.

    대신 누수를 찾기 위해 메모리 누수 감지 소프트웨어를 실행하는 것이 좋습니다.

    2

    빠른 답변 : 당신이 컨트롤러를 사용하는 디버거를 사용하여 자신의 응용 프로그램 도메인을 이해하고 어떻게 할 수있는 C++ 프로그래머가있는 경우

    , 아마 신중한 검토를하고 메모리 버그와 문제를 해결하는 것이 더 쉽습니다 . 결국, 시간과 노력이 이미 코드에 소요되었고, 사소한 코드가 아니라면 C#으로 다시 작성하면 새로운 로직 오류가 발생할 수 있습니다. 영업에 대한

    질문 :

    토론의 코드는 컨트롤러의 펌웨어와 상호 작용 드라이버 코드입니다.그것은 기본적으로 몇 가지 명령을 취하고 컨트롤러에서 응답을 가져옵니다. 이 코드는 UI를 가지고 있지 않으며 동일한 드라이버 코드는 "드라이버"라는 한

    당신이 사용자 모드 소프트웨어에 대해 얘기하는 데이터를 업데이트 할뿐만 아니라 SQL과 상호 작용, 또는 당신은 얘기 커널 모드 장치 드라이버?

    유체 흐름을 제어하는 ​​펌웨어를 실행하는 컨트롤러에 대한 추가 정보를 제공하면 도움이됩니다. C++ 백엔드가 RS232 (직렬)를 통해 컨트롤러에 연결됩니까? 이더넷? USB? TCP/IP? PCI?

    TCP/IP 또는 RS232 (직렬)를 통해 컨트롤러 하드웨어에 연결하는 경우 C#/.NET은이 작업을 처리 할 수 ​​있도록 잘 준비되어 있습니다. USB, PCI, 이더넷 등과 같은 다른 장치의 경우 드라이버 요구 사항에 따라 C 또는 C++로 프로그래밍해야하는 장치 드라이버가 필요합니다. 물론 C++에있는 사용자 모드 부분을 캡슐화하거나 직접 호출을 Win32에 캡슐화 할 수 있지만 프로젝트에 더 많은 개발 작업이 추가됩니다.

    +0

    단어 '드라이버'를 사용합니다. 그것을 바로 잡자. 해당 코드는 'RS485 포트에서 컨트롤러의 펌웨어와 통신하는 어플리케이션'입니다. 컨트롤러는 독점적이며 공개 시장에서 판매되지 않습니다. 정확한 질문은 펌웨어에 많은 명령을 보내고 응답을 받아야한다는 것입니다. 네트워크의 대기 시간은 확실히 관련 될 것입니다. 그러나 .Net은 속도 저하에 추가됩니까? –

    +0

    RS485를 사용하면 .NET을 선택하는 것이 좋습니다. 정말 오버 헤드를 추가하거나/O ++ C보다 느린 I을해서는 안된다. 나는 RS485를 통해 기계를 제어하기 위해 C#/.NET을 사용했으며 확실히 그 일에 종사하고있었습니다. 그런 다음 I/O, 비동기의 모든 유형과 마찬가지로 나는/(아마도 콜백 포함) O가보다 효율적으로 응용 프로그램을 가능하게 할 것이다, 속도 걱정하지만, 트레이드 오프가도 크게 추가 할 것입니다 경우 코드의 복잡성. C#에서 다시 쓰기를 결정하기 전에 메모리 누수가 발생하는 이유를 판단했다고 생각합니다. 그것은 설계 오류입니까? 아니면 그냥 프로그래머 오류가 있었나요? –

    0

    몇 가지 버그로 인해 다른 언어로 된 전체 프로그램을 다시 작성하지 마십시오. 새로운 제품에는 다른 프로그램이있을 것이며 Q &주기를 다시 시작해야합니다. C++ 프로그램의 버그를 수정했습니다. 문제가 메모리 관리 인 경우 std::auto_ptr 또는 std::tr1::shared_ptr을 자세히 살펴볼 예정입니다. 완료되면 자동으로 메모리가 삭제됩니다. 이것이 옵션이 아니라면 valgrind를 통해 무언가를 운영하거나 상업용 메모리 체커를 지불하는 것이 (시간과 돈 모두로) 모든 것을 다시 작성하는 것보다 저렴할 것이라고 확신합니다.

    0

    "언어는 그 자신의 방식대로 특별합니다."남자 나는 포옹이 필요합니다. 코드가 잘 작성되지 않았기 때문에 언어를 변경하지 마십시오 ... 더 나은 코드를 작성하고 사용 가능한 리소스를 사용하십시오.

    관련 문제