Quels sont les avantages et les inconvénients de l'écrit en C#/XAML et C++/XAML applications WinRT dans Windows8?
J'aimerais aller en bas de la route de portage d'un WPF/Silverlight composant de Windows 8. Pour un peu de contexte, le composant est un en temps réel Graphique WPF, qui utilise un mélange de WPF/XAML et bitmap rendu à atteindre la haute performance.
J'aimerais le composant de Métro compatible, par exemple, utilisé dans le métro de mode ainsi que le mode de bureau. J'ai lu beaucoup de choses sur la création de C++/WinRT applications dans Windows 8 ainsi que C#/XAML applications, mais quelles sont les différences entre les deux cadres?
Il y a des restrictions si vous choisissez C#/XAML sur C++/XAML? Également envisager le portage en C#/Xaml .NET4.0 à Windows8 serait beaucoup plus facile si je pouvais coller à C#/XAML, cependant je serai en mesure de créer un complet Métro composant à l'aide de cette méthode?
Vos commentaires/suggestions apprécié.
Edit:
Si vous êtes à droit de vote de fermer ce fil, s'il vous plaît poster un commentaire pourquoi. Ses une question valable, a +de 6 voix, quatre réponses et un favori. Semble raisonnable de le garder pour moi!
- Si la vitesse est importante, l'utilisation de C++/XAML, si ce n'est l'utilisation de C#/XAML, il sera plus facile pour vous comme vous l'avez dit
- Mais est-il vraiment être plus rapide en C++? Le vieil argument C# vs C++ pour la vitesse. Vous pouvez atténuer beaucoup de C#'s défauts par une meilleure codage. Ce que j'ai besoin de savoir est, sont les ensembles de fonctionnalités de C# et C++ différents. E. g. puis-je créer un complet de composants en C#/Xaml pour cible le métro et les modes bureau? Merci!
- En C++ est toujours plus rapide, mais vous ne pouvez pas créer un projet qui s'exécute dans le Métro et le bureau aussi. Il doit être l'un ou l'autre
- Fou. Pouvez-vous donc double déployer? Comme la façon dont vous écrivez du code pour Silverlight et WPF et "partager" le code comme lien? BTW, si vous écrivez ce que vous savez que répondre, je serais heureux de voter 🙂
- Faux, faux et faux. C++ vs C# pour un composant écrivain a une réponse différente. Va avec C++ est favorable, car elle ne permet pas de glisser dans les dépendances supplémentaires. Les Clients ne peuvent pas utiliser votre composant, parce que leur code C++ ne veut pas avoir le CLR chargé. Prochaine étape: la Performance. C# bat C++, par une marge importante à l'égard de tas de gestion. Si votre application crée de nombreux de courte durée, de petits objets, vous allez voir le code C# de l'exécution d'un ordre de grandeur plus rapide. En outre, un composant WinRT peut être utilisé dans une Application du Windows Store, ainsi que dans une Application de Bureau.
Vous devez vous connecter pour publier un commentaire.
Je vois la différence comme un choix de conception, qu'une préférence personnelle de la langue. La préférence serait plus liée à VB vs C#. Et généralement, c'est les mêmes différences que vous pouvez obtenir dans n'importe quelle application où vous pouvez choisir C++ ou .NET.
C++ vous donnera plus rapide temps de démarrage. IIRC, .NET 4.5 a l'auto NGENing capacités (pas sûr de la façon dont elle est liée aux applications metro), ce qui peut aider à atténuer typique de démarrage lent de temps de .NET applications.
C++ vous donnera à réduire l'utilisation de la mémoire car il n'utilise pas de garbage collector. Cela devient de plus en plus importante sur les ressources limitées des appareils tels que les tablettes. IIRC, .NET 4.5 a plus de mesures d'atténuation en GC des pauses (qui peut causer de l'INTERFACE utilisateur studder), ils sont encore une réalité avec le code managé.
Depuis .NET et C++ utilise le même WinRT cadre, il ne sera probablement pas trop de différence dans l'interaction avec le XAML/WinRT plate-forme (techniquement plus rapide de l'interaction avec les objets WinRT via C++, mais le coup est vraiment petit), mais bien sûr, votre code d'utilisateur sera généralement plus rapide avec le C++ que .NET.
C++ est généralement plus difficile à déjouer, même en comparaison avec d'obfuscation .NET code. Si sly voleurs peuvent voler votre IP indépendamment.
Depuis .NET a été créée d'abord pour la commodité du développeur et la productivité des développeurs, vous aurez plus de commodité options dans l'architecture de vos applications (par exemple, la réflexion basée sur des outils tels que le DI/Cio).
De l'itération du code de l'application peut être plus facile par l'intermédiaire .NET comme .NET compile plus rapide que le C++, mais correctement créé les projets C++ cet effet peut être atténué sensiblement.
Pur .NET les projets peuvent soutenir "any CPU", ce qui signifie que votre application peut s'exécuter sur toutes les éditions WinRT plates-formes. Les projets C++, vous aurez simplement à recompiler à l'appui de BRAS, x86/64. Si vous .NET application dépend d'un personnalisé composant C++, vous devrez le compiler pour chaque architecture.
Parce que WinRT a été créé à partir du sol en place pour prendre en charge plusieurs langues, ma suggestion pour les devs qui ne coûtent pas à l'aise avec le C++ est de coller avec .NET, mais d'explorer des domaines qui bénéficient de C++. Microsoft a fait un bon travail avec l' /CX projections et de plus C# devs devraient être en mesure de trouver leur chemin. Ma suggestion pour C++ devs est de coller avec C++ et obtenir tous les avantages du C++.
À partir d'un XAML perspective, il devient un choix de langue. Le code XAML de l'INTERFACE utilisateur de la pile est la même quel que soit le code de la langue que vous choisissez ici. En fonction de votre objectif de l'application, il peut être plus judicieux d'utiliser le C++ si vous avez besoin des avantages de ce que la langue fournit vous.
Nous avons également la possibilité de mixer de DirectX et XAML maintenant dans Win8 et cela signifie généralement C++ -- cependant, avec des projets comme SharpDX qui n'est pas encore totalement valide (oui je me rends compte que vous allez payer une performances en DirectX pour l'emballage dans du code managé...je suis juste en indiquant que l'on peut faire).
Votre question semble être sur la création d'une ré-utilisable composant qui peut être utilisé dans le bureau et le Métro. Cela peut être un défi un peu selon la façon dont vous l'architecte raison de la façon dont des changements étaient nécessaires à la façon dont les ressources (c'est à dire, générique.xaml) sont chargés à partir d'un emplacement de fichier par rapport à une ressource incorporée.
Le seul avantage que je pense de l'utilisation de C++/XAML est si la vitesse est importante pour votre projet.
L'avantage du C#/XAML est qu'il est beaucoup plus facile à code, surtout si votre projet de ses en C# déjà.
Maintenant il n'y a aucun moyen de faire une application qui vise à la fois le Métro et le bureau dans Windows 8.
Espère que cette aide.
Bien d'autres peuvent en savoir plus, mais en se fondant sur La réponse de Microsoft à une question que j'ai posée en arrière autour de WinRT annonce le temps:
Que suggère des performances similaires compromis à ce que nous avons actuellement de l'expérience à l'aide de la CLR vs code natif pour accéder à ce qui est essentiellement un code natif (API WinRT). Mais j'ai hâte de voir certaines enquêtes empiriques dans ce pour voir comment les différents WinRT est.