34

WPF/Silverlight コンポーネントを Windows 8 に移植する方法について説明したいと思います。コンテキストを少し説明すると、このコンポーネントはリアルタイムの WPF Chartであり、WPF/XAML とビットマップ レンダリングの混合を使用して高いパフォーマンスを実現します。パフォーマンス。

コンポーネントを Metro と互換性があるようにしたいと考えています。たとえば、デスクトップ モードだけでなく Metro モードでも使用できます。Windows 8 でのC++/WinRTアプリケーションとC#/XAMLアプリケーションの作成についてよく読んでいますが、2 つのフレームワークの違いは何ですか?

C++/XAML ではなく C#/XAML を選択した場合、制限はありますか? また、.NET4.0 の C#/Xaml から Windows8 への移植は、C#/XAML に固執できればはるかに簡単になると考えてください。ただし、この方法を使用してフル機能の Metro コンポーネントを作成することはできますか?

コメント/提案をお待ちしております。

編集:

このスレッドを閉じることに投票する場合は、その理由をコメントに投稿してください。有効な質問で、+6 票、4 つの回答、1 つのお気に入りがあります。私にそれを保持するのは合理的です!

4

4 に答える 4

22

この違いは、個人的な言語の好みというよりは、デザインの選択によるものだと思います。優先度は、VB と C# に関連しています。一般に、C++ または .NET を選択したアプリケーションで得られる違いは同じです。

C++ を使用すると、起動時間が短縮されます。IIRC、.NET 4.5 には自動 NGENing 機能があるため (メトロ アプリとの関連性は不明)、.NET アプリケーションの典型的な遅い起動時間を軽減するのに役立つ可能性があります。

C++ はガベージ コレクターを使用しないため、一般的なメモリ使用量が少なくなります。これは、タブレットなどのリソースに制約のあるデバイスではますます重要になります。IIRC、.NET 4.5 では、GC の一時停止 (UI がスタッディングする原因となる可能性があります) に対する緩和策が強化されていますが、マネージ コードを使用する場合でも、それらは現実のものです。

.NET と C++ は同じ WinRT フレームワークを使用するため、XAML/WinRT プラットフォームとのやり取りにはおそらく大きな違いはありません (技術的には C++ 経由で Wi​​nRT オブジェクトとやり取りする方が高速ですが、ヒットは非常に小さいです)。通常、コードは .NET よりも C++ の方が高速です。

C++ は一般に、難読化された .NET コードと比較しても、リバース エンジニアリングがより困難です。ずるい泥棒は、関係なくあなたの IP を盗むことができますが.

.NET は最初に開発者の利便性と開発者の生産性のために作成されたため、アプリケーションを設計する際により多くの便利なオプションがあります (DI/IoC などのリフレクション ベースのツールなど)。

.NET は C++ よりも高速にコンパイルされるため、アプリケーション コードの反復は .NET を介して簡単に実行できますが、正しく作成された C++ プロジェクトは大幅に軽減できます。

純粋な .NET プロジェクトは "任意の CPU" をサポートできます。つまり、アプリケーションは、サポートされているすべての WinRT プラットフォームで実行できます。C++ プロジェクトは、ARM、x86/64 をサポートするために再コンパイルするだけです。.NET アプリケーションがカスタム C++ コンポーネントに依存している場合は、アーキテクチャごとにコンパイルする必要があります。

WinRT は多くの言語をサポートするためにゼロから作成されたので、C++ に慣れていない開発者への私の提案は、.NET に固執し、C++ の恩恵を受ける分野を探求することです。Microsoft は /CX プロジェクションで素晴らしい仕事をしており、ほとんどの C# 開発者は自分の道を見つけることができるはずです。C++ 開発者への私の提案は、C++ に固執し、C++ のすべての利点を得ることです。

于 2012-04-05T20:26:50.303 に答える
3

XAMLの観点からは、言語の選択になります。ここで選択したコード言語に関係なく、XAML UI スタックは同じです。アプリの目的によっては、その言語が提供する利点が必要な場合は、C++ を使用する方が理にかなっている場合があります。

また、Win8 で DirectX と XAML を混在させることもできます。これは通常、C++ を意味しますが、SharpDX のようなプロジェクトではまだ完全には有効ではありません (はい、マネージ コードでラップするために DirectX でパフォーマンス ヒットを支払うことになります)。 ...私はそれができることを指摘しているだけです)。

あなたの質問は、デスクトップと Metro で使用できる再利用可能なコンポーネントの作成に関するものです。リソース (つまり、generic.xaml) をファイルの場所から読み込む方法と、埋め込まれたリソースから読み込む方法を変更する必要があったため、設計方法によっては、これは少し難しいかもしれません。

于 2012-04-05T16:27:46.127 に答える
2

C++/XAML を使用する唯一の利点は、プロジェクトにとって速度が重要な場合です。C#/XAML の利点は、特にプロジェクトが既に C# である場合は、コーディングがはるかに簡単になることです。

今のところ、Windows 8 で Metro とデスクトップの両方を対象とするアプリケーションを作成する方法はありません。

お役に立てれば。

于 2012-04-05T16:29:22.433 に答える
2

他の人はもっと知っているかもしれませんが、質問に対するMicrosoftの回答に基づいて、WinRTの発表時期に戻ってきました:

WinRT はプロトコルであり、一連のネイティブ API であり、各言語が既存の実行環境 (JavaScript の Chakra、C# の CLR、C++ の CRT/raw ネイティブ コード) に忠実であることを可能にします。

これは、本質的にネイティブ コード API (WinRT) にアクセスするために CLR とネイティブ コードを使用して現在経験しているものと同様のパフォーマンスのトレードオフを示唆しています。しかし、WinRT がどのように異なるかを確認するために、これに関するいくつかの実証的な調査が行われることを楽しみにしています。

于 2012-04-05T16:36:05.853 に答える