Должен ли я пойти с C # / .Net ИЛИ C ++ для моего приложения? - PullRequest
0 голосов
/ 12 мая 2009

Я работаю над проектом, который говорит с SQL Server, и большая часть внутреннего кода находится в C++.

Это приложение, которое контролирует поток нескольких жидкостей при загрузке их в держатели. Некоторые из внутренних модулей, которые общаются с контроллерами, которые в свою очередь управляют потоком жидкостей, находятся в C++. Так как у них есть утечки памяти и некоторые другие ошибки, была попытка перенести их на .Net.

Я понимаю, что производительность снижается, когда мы используем .Net для внутренних модулей . Поэтому мое мнение заключалось не в том, чтобы преобразовать эти внутренние модули в .Net, а чтобы устранить проблемы в самом C ++.

Обсуждаемый код - это приложение, которое взаимодействует с прошивкой контроллеров. Он в основном принимает некоторые команды и получает ответ от контроллеров. Этот код не имеет пользовательского интерфейса, и тот же код взаимодействует с SQL также для обновления данных. Оба являются частью одного exe .

.Net считается хорошим, если производительность не ожидается высокой. Было бы целесообразно написать новый код, особенно если это связано с разработкой пользовательского интерфейса. Другая школа мысли: .Net подходит для более высоких уровней, но не для более низких уровней в многоуровневой архитектуре.

Мне бы хотелось узнать мнение других с другой точки зрения. Вот некоторые аспекты, которые следует учитывать:

  • Скорость
  • ремонтопригодность кода
  • риски, связанные с миграцией в будущем
  • и т.д.

Пожалуйста, прокомментируйте с точки зрения переписывания существующего кода. Это будет преобразование строки C ++ в C # один к одному, если мы решим пойти на это.

Ответы [ 5 ]

2 голосов
/ 12 мая 2009

Быстрый ответ:

Если у вас есть способные программисты на C ++, которые могут использовать отладчики и разбираться в предметной области своего приложения и в том, как использовать контроллеры, вероятно, было бы проще провести тщательный анализ и исправить ошибки и проблемы с памятью. В конце концов, время и усилия уже потрачены на код, и, если это не тривиальный код, переписывание в C # может привести к новым логическим ошибкам.

Вопросы для ОП:

Обсуждаемый код - это код драйвера, который взаимодействует с прошивкой контроллеров. Это в основном принимает некоторые команды и получает ответ от контроллеров. Этот код не имеет Пользовательский интерфейс и тот же код драйвера также взаимодействуют с SQL для обновления данных

Вы говорите о программном обеспечении в пользовательском режиме, которое вы назвали «драйвером», или вы говорите о драйвере в режиме ядра?

Было бы полезно, если бы вы могли предоставить больше информации об этих контроллерах, работающих с микропрограммой, которая контролирует поток жидкости. Подключается ли бэкэнд C ++ к контроллерам через RS232 (Serial)? Ethernet? USB? TCP / IP? PCI

Если вы подключаетесь к оборудованию контроллера через TCP / IP или RS232 (Serial), C # /. NET хорошо подходит для решения этой задачи. Для чего-либо еще, например USB, PCI, Ethernet и т. Д., Вам понадобится драйвер устройства, который должен быть запрограммирован на C или C ++ в зависимости от требований драйвера. Конечно, вы можете инкапсулировать часть пользовательского режима, которая находится в C ++, или инкапсулировать прямые вызовы Win32, но это добавит больше задач разработки в ваш проект.

1 голос
/ 12 мая 2009

Очевидно, единственная проблема с существующим кодом C ++ - утечки памяти.

Это кажется мне недостаточной причиной, чтобы переписать все это на C #.

Вместо этого я бы предложил запустить программное обеспечение для обнаружения утечек памяти, чтобы найти утечки.

0 голосов
/ 15 мая 2009

«Язык особенный по-своему», парень, мне нужно обнять, по-настоящему. Не меняйте языки, потому что код написан плохо ... пишите лучший код и используйте доступные вам ресурсы.

0 голосов
/ 12 мая 2009

Не переписывайте целую программу на другом языке из-за нескольких ошибок - в новом продукте просто будут другие, и цикл вопросов и ответов придется перезапустить. Я бы исправил ошибки в программе C ++. Если проблема связана с управлением памятью, я бы настоятельно рассмотрел std::auto_ptr или std::tr1::shared_ptr, которые автоматически удалят память по окончании. Если это не вариант, я уверен, что запустить что-то через valgrind или даже заплатить за коммерческие проверки памяти было бы дешевле, чем переписать все это (как по времени, так и по деньгам).

0 голосов
/ 12 мая 2009

каждый язык по-своему особенный, вы должны выяснить, какой язык лучше всего подходит для сценария

...