Каковы плюсы и минусы написания приложений C # / XAML и C ++ / XAML WinRT в Windows8? [закрыто]

Я хотел бы пойти по пути переноса компонента WPF / Silverlight в Windows 8. Для некоторого контекста компонент являетсяГрафик WPF в реальном времени, который использует смесь WPF / XAML и растрового рендеринга для достижения высокой производительности.

Мне бы хотелось, чтобы компонент был совместимым с Metro, например используется в режиме метро, а также в режиме рабочего стола. Я много читал о созданииC ++ / WinRT приложения в Windows 8, а такжеC # / XAML приложения, но каковы различия между двумя платформами?

Существуют ли ограничения, если вы выбираете C # / XAML вместо C ++ / XAML? Также учтите, что перенос с C # / Xaml в .NET4.0 на Windows8 был бы намного проще, если бы я мог придерживаться C # / XAML, однако смогу ли я создать полнофункциональный компонент Metro с помощью этого метода?

Ваши комментарии / предложения приветствуются.

Edit:

Если вы голосуете, чтобы закрыть эту ветку, оставьте комментарий, почему. Это правильный вопрос, имеет +6 голосов, четыре ответа и один любимый. Кажется разумным оставить это мне!

 Adrian05 апр. 2012 г., 18:22
В C ++ всегда быстрее, но вы не можете создать проект, который работает как в Metro, так и на рабочем столе. Это должен быть один или другой
 IInspectable12 сент. 2016 г., 22:18
@ Кобе: неправильно, неправильно и неправильно. C ++ против C # для компонента-разработчика имеет другой ответ. Работа с C ++ является благоприятной, поскольку она не тянет за собой дополнительные зависимости. Клиенты могут не использовать ваш компонент, потому что их код на C ++ не хочет загружать CLR. Далее: производительность. C # значительно превосходит C ++ с точки зрения управления кучей. Если ваше приложение создает много коротких, небольших объектов, вы увидите, что код C # работает на порядок быстрее. Кроме того, компонент WinRT можно использовать как в приложении Магазина Windows, так и в приложении для рабочего стола.
 Adrian05 апр. 2012 г., 18:17
Если важна скорость, используйте C ++ / XAML, если не используете C # / XAML, вам будет проще, как вы сказали
 Dr. ABT05 апр. 2012 г., 18:19
Но будет ли это действительно быстрее в C ++? Старый аргумент C # против C ++ для скорости. Вы можете уменьшить многие недостатки C # с помощью лучшего кодирования. Что мне нужно знать, так это то, отличаются ли наборы функций для C # и C ++. Например. я могу создать полнофункциональный компонент в C # / Xaml для работы как в метро, так и в режиме рабочего стола? Спасибо!
 Dr. ABT05 апр. 2012 г., 18:23
Псих. Так что вы можете использовать двойное развертывание? Например, как вы пишете код для Silverlight и WPF и & quot; делитесь & quot; код как ссылка? Кстати, если вы напишите то, что знаете как ответ, я буду рад проголосовать :)

Ответы на вопрос(4)

Единственное преимущество, которое я могу придумать, это использовать C ++ / XAML, если скорость важна для вашего проекта. Преимущество C # / XAML в том, что код гораздо проще, особенно если ваш проект уже на C #.

К настоящему времени в Windows 8 нет возможности создать приложение, предназначенное как для Metro, так и для настольных компьютеров.

Надеюсь это поможет.

 Dr. ABT05 апр. 2012 г., 18:50
Я предполагаю, что компоненты WinRT C ++ можно использовать в C ++ / WinRT ИЛИ .NET, тогда как компоненты .NET можно использовать только в .NET. Это звучит правильно?
 05 апр. 2012 г., 21:19
Я думаю, что это поможет вам лучше понять :)en.wikipedia.org/wiki/Windows_Runtime
 12 сент. 2016 г., 22:11
Есть много преимуществ использования C ++ (обычного или C ++ / CX), и производительность, вероятно, наименее важна. С выходом .NET Native время запуска достигло сопоставимых показателей. Что более важно, хотя (для меня, во всяком случае):Deterministic вывоз мусора. В C ++ вы можете видеть, где расположены объекты и где работают деструкторы. В .NET часто приходится догадываться, и если объект оборачивает собственный общий ресурс, все может легко сломаться. Может быть, еще важнее: компоненты C ++ могут использоваться в любом приложении, без перетаскивания в зависимость от CLR.

Ну, другие могут знать больше, но на основеОтвет Microsoft на вопрос, который я задал во время объявления WinRT:

WinRT is a protocol and a set of Native APIs, allowing each language to remain true to its existing execution environment - Chakra for JavaScript, CLR for C# and the CRT/raw native code for C++.

Тотsuggests компромиссы производительности аналогичны тому, что мы в настоящее время испытываем, используя CLR и собственный код для доступа к тому, что по сути является API с собственным кодом (WinRT). Но я с нетерпением жду некоторых эмпирических исследований этого, чтобы увидеть, насколько отличается WinRT.

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

У нас также есть возможность смешивать DirectX и XAML сейчас в Win8, и это обычно означает C ++ - однако с такими проектами, как SharpDX, которые все еще не полностью допустимы (да, я понимаю, что вы заплатите удар по производительности в DirectX за перенос в управляемый код ... я просто указываю, что это можно сделать).

Похоже, ваш вопрос касается создания повторно используемого компонента, который можно использовать на настольном компьютере и в Metro. Это может быть несколько сложным, в зависимости от того, как вы его спроектируете, из-за того, что потребовались некоторые изменения в том, как ресурсы (например, generic.xaml) загружаются из местоположения файла по сравнению со встроенным ресурсом.

 05 апр. 2012 г., 22:36
+1 Вы можете увидеть ответ Microsoft в ответе, когда @TimHeuer говорит: «У нас также есть ...» :)
 Dr. ABT05 апр. 2012 г., 18:43
Я на самом деле читал эту статью на C # / Xaml и SharDX:advertboy.wordpress.com/2012/04/04/… Действительно очень хорошо. Я хочу скорость, а также легкость порта. Это существующий компонент в C # / WPF, и общая кодовая база сделала бы меня счастливым :-)
Решение Вопроса

Я вижу разницу в выборе дизайна, а не в личном предпочтении языка. Предпочтение будет больше связано с VB против C #. Как правило, это те же различия, что и в любом приложении, в котором вы выбираете C ++ или .NET.

C ++ даст вам более быстрое время запуска. IIRC, .NET 4.5 имеет функции автоматического NGENing (не знаю, как это связано с приложениями метро), так что это может помочь уменьшить типичное медленное время запуска приложений .NET.

C ++ снизит общее использование памяти, поскольку не использует сборщик мусора. Это становится все более важным для устройств с ограниченными ресурсами, таких как планшеты. IIRC, .NET 4.5 имеет больше смягчений в паузах GC (которые могут привести к тому, что пользовательский интерфейс начинает работать), они все еще являются реальностью с управляемым кодом.

Поскольку .NET и C ++ используют одну и ту же среду WinRT, вероятно, не будет большой разницы во взаимодействии с платформой XAML / WinRT (технически более быстрое взаимодействие с объектами WinRT через C ++, но попадание действительно небольшое), но, конечно, ваш пользователь код, как правило, будет быстрее с C ++, чем .NET.

C ++ обычно труднее реконструировать, даже по сравнению с запутанным .NET кодом. Хотя хитрые воры могут украсть твой IP независимо.

Поскольку .NET был создан в первую очередь для удобства разработчиков и разработчиков, у вас будет больше удобных вариантов при разработке ваших приложений (например, инструментов на основе отражений, таких как DI / IoC).

Итерация кода приложения может быть проще с помощью .NET, поскольку .NET компилируется быстрее, чем C ++, но правильно созданные проекты C ++ могут быть существенно смягчены.

Чистые проекты .NET могут поддерживать «любой процессор», что означает, что ваше приложение может работать на всех поддерживаемых платформах WinRT. Проекты C ++ вам просто придется перекомпилировать для поддержки ARM, x86 / 64. Если ваше .NET-приложение зависит от пользовательского компонента C ++, вам придется компилировать для каждой архитектуры.

Поскольку WinRT был создан с нуля для поддержки многих языков, я предлагаю разработчикам, не знакомым с C ++, придерживаться .NET, но исследовать области, которые выигрывают от C ++. Microsoft проделала большую работу с проекциями / CX, и большинство разработчиков C # должны быть в состоянии обойти их. Мое предложение для разработчиков C ++ - придерживаться C ++ и получить все преимущества C ++.

 Dr. ABT05 апр. 2012 г., 23:49
Понял. Хорошо для дебюта в Win8 прямой порт существующего компонента на C # звучит как лучший вариант. Тем не менее, для более специализированных приложений, возможно, стоит разработать на C ++
 Dr. ABT05 апр. 2012 г., 23:07
Вау, спасибо за сравнение / краткое изложение. Могу я задать вопрос? Если я создаю пользовательский контроль на C # / Xaml, можно ли его использовать в приложениях C ++ / WinRT или просто в приложениях C #?
 05 апр. 2012 г., 23:20
Вы можете использовать компонент C # WinRT из приложения C ++. Хотя разработчики должны знать, что они несут с собой всю зависимость CLR ... Так что некоторые приложения на чистом C ++ могут не использовать его.

Ваш ответ на вопрос