Выделите управляемый или неуправляемый в смешанном приложении C ++ .NET? - PullRequest
4 голосов
/ 19 февраля 2009

Приложение, над которым я работаю, является приложением WinForms, написанным почти полностью на Visual C ++ около 2003 года. До моего прибытия на сцену был выбран .NET из-за инфраструктуры построения пользовательского интерфейса, но было разработано подавляющее большинство кода. в неуправляемой земле. Частично это было абсолютно необходимо - мы выполняем некоторую обработку изображений в реальном времени для некоторых очень больших наборов данных, используем некоторые библиотеки обработки изображений Intel, которым нужны указатели на буферы изображений, и мы действительно являемся в этом < 1% случаев, когда производительность является критической.

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

Мой коллега и я существенно различаемся в отношении того, следует ли уделять дальнейшее развитие неуправляемому или управляемому. За исключением случая, который я упомянул, требования к производительности, предписывающие неуправляемый код, отсутствуют. Мы твердо привержены .NET, поэтому кросс-платформенность не проблема. Я придерживаюсь мнения, что мы должны отдавать предпочтение управляемым, если не указано иное.

В прошлом месяце мой коллега разработал набор классов, которые управляют подсистемой; вместо того чтобы реализовывать их как ref-классы и добавлять некоторые события в интерфейс .NET, он написал пару реализаций Observer, используя gcroot для хранения дескрипторов управляемых клиентов, и позволил себе остаться на неуправляемой земле. Это кажется мне неправильным, просто потому, что зачем писать что-то, что вы можете получить бесплатно? Но мне интересно, слишком ли я жесток.

Есть мысли?

Ответы [ 2 ]

0 голосов
/ 15 февраля 2014

Дзен управляемого и неуправляемого программирования:

Примером хорошего неуправляемого кода будет отсутствие заметного недостатка в ошибках управления памятью по сравнению с эквивалентным управляемым кодом.

Хороший управляемый код будет проиллюстрирован отсутствием заметного недостатка в производительности по сравнению с эквивалентным неуправляемым кодом.

Нет ничего хорошего во взаимодействии между ними;)

0 голосов
/ 09 августа 2012

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

Вы сказали: «Мы твердо привержены .NET». Кто здесь "мы"? Это ваша компания или вы и ваш коллега? Похоже, ваш коллега не очень привержен .NET. Если компания привержена делу, а коллега - нет, то кто-то должен подтвердить вашему коллеге, что он является частью команды и должен следовать указаниям компании.

Если решение действительно принимается вами обоими, и ваш коллега не сдвинется с места, тогда вам следует согласиться на это.

У нас также есть большое управляемое / неуправляемое приложение, и мы бы никогда не подумали делать что-либо в неуправляемом, если бы в этом не было необходимости. Большая часть приложения управляется. Так намного лучше. Но это мое мнение, а не факт.

...