Подтвердить что ты не робот

Каковы преимущества и недостатки написания приложений С#/XAML и С++/XAML WinRT в Windows8?

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

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

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

Ваши комментарии/предложения оценены.

Изменить:

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

4b9b3361

Ответ 1

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

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

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

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

С++, как правило, сложнее перерабатывать, даже если сравнивать с обфускационным кодом .NET. Хотя хитрые воры могут украсть ваш IP независимо.

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

В настоящее время нет способа сделать приложение, которое предназначено как для Metro, так и для рабочего стола в Windows 8.

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

Ответ 4

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

WinRT - это протокол и набор Native API, позволяющий каждому языку оставаться верным существующей среде исполнения - Chakra для JavaScript, CLR для С# и CRT/исходный собственный код для С++.

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