2013-04-16 5 views
6

私は、データの読み込み、処理、表示に使用されるツールを開発しています。私はC++/C#の私の選択について混乱しています。私はC++のプログラミングだけを行っています。 GUIなし、またはC#なし。パフォーマンス面での選択(VS2010)C++とC#

私はVS2010(義務)を使用します。

私はウェブ上で多くの読書をしました。私はそれが高性能になると、C++が最良の選択であることを理解しています。

  1. A GUI
  2. 読み込みファイル(1つのファイルは約25 MBで、約5000の画像の合計は、さらなる処理のための時に使用されるかもしれない)のデータを処理
  3. :私は、私は必要なものをリストアップします。主に数学的操作。
  4. データを表示します。これらは重いデータである可能性があります。 (〜GB)。私はこのためにOpenGLを使用することを考えています。

私はVC++でWindowsフォームアプリケーションを使い始めました。私はGUIを作ったし、それはかなり速かった。私はファイルを読む際にいくつか問題がありました。私の周りのほとんどの人がMFC(ダイアログベース)を使用しています。しかし、彼らは主にファームウェアプログラミングに取り組んでいます。彼らは私がMFCで開発すべきだと勧めました。しかし私は生産性が低下したことに気付きました

これまでの使用方法を教えてください。だから私の質問は:このツールが実行するはずのタスクについては、それはMFCに行く価値があるか、C#(またはC++のCLR)に移行する方が良いでしょうか。パフォーマンスに関して大幅な改善が得られれば、時間は最大の懸念事項ではありません。

これは開発の最初の部分です。その後、拡張する必要があります。そのことを念頭に置いて、将来の見通しには何が良いでしょうか。 (この情報が有用な場合は、処理にCUDAを使用する必要があるかもしれません)

私は明確です。親切に穏やかになり、必要に応じて詳細を聞いてください。

EDITS:明確な回答のため

感謝。読み取られるデータはバイナリイメージです(それぞれ25 MB〜-35 MB〜)。 1000枚の画像が積み重ねられて処理されます(一度にすべてではなく、ピクセルごとに)。私はMATLABで実装していますので、プロセスについての公正な考え方があります。主に、統計解析とフーリエ解析がデータに対して行われます。最後にポイントクラウドが生成されます。私はPCL(C++の点群ライブラリ)を使うことを考えています。私は今MATLAbに表示しているので、これはあまり大きくありません。将来的には、ファイルが大きくなってC++/C#環境に移行する可能性があります。表示されるデータには、ポイントの選択や、その特定のポイントのプロパティ/プロットを表示するオプションの表示などの機能が必要です。グラフィックスは重く表示されませんが、機能を選択することが重要です。

+1

「パフォーマンス面で大幅な改善が得られれば、時間は最大の問題ではありません。」次に、各言語でプロトタイプを作成し、重要な操作の時間を測定し、最速のものを選択します。 –

+2

GUIデザインを容易にするために2つのC#を混在させることができ、C#で十分に速くないタスクのネイティブC++または(よりよい)C++/CLIモジュールをコーディングすることができます。早すぎる最適化には注意してください。何か作業をしてから遅すぎるかどうかを確認するのがベストです。 –

+4

あなたはC#を使用することができますが問題はありませんが、私はあなたがWPFを使用することをお勧めします – gasroot

答えて

7

C#とC++は、長期間にわたって大量のデータを話さない限り、ほぼ同じパフォーマンスを発揮します。ほとんどの場合、C++はC#よりもわずかな秒数を与えることができます。毎日のアプリケーションで大きな利点ではありません。

しかし、ドライバーやビデオゲームなどの究極のパフォーマンスが絶対に重要な場合は、C++で得られるミリ秒とマニュアルメモリコントロールが明らかに有利です。他のすべての場合、C#は一般的に書込みとデバッグが容易で高速です。マネージコードは、ほとんどの場合、メモリの割り当てや割り当て解除を処理しないことを意味します。それは私の意見では、多くの "クリーナー"コードファイルを提供します。.NETで

GUIはリサイズやWPFで行われます。ほとんどの場合、WPFの方が明らかです。なぜなら、主な利点の1つがDirectXで描画されているため、ハイエンドのコンピュータではインターフェイスがはるかに高速になります。

しかし、あなたがカスタム多くの情報を表示する際に計画している場合、のは、3Dを言わせて、あなたはそれがはるかに簡単にあなたがDirectXの/ OpenGLのための要求を直接コーディングするかもしれません。 SlimDXのようなラッパーを使用すると、あなたの人生を楽にすることができます。しかし、DirectXやOpenGL指向のものをコーディングすることを学ぶことは、実際にはこの種のコードを扱ったことがないならば、本当に簡単なことではないことを知っておくべきです。シェーダは単独で非常に特別な世界です。

あなたがデータであることハンドルとあなたがそれを表示するには計画の方法に関する詳細な情報を提供できる場合、私たちはより完全な解決に向けてあなたを指すことができます。

UPDATE:

私の推測で、この場合には、あなたは計算の一部について外部のライブラリを使用している場合は、さらに、C#とC++とのパフォーマンスの大きな違いを見つけることができませんです。 C#とC++の両方で同じライブラリを使用できます。グラフィック計算が重い場合は、DirectX/OpenGLを介してGPUに転送するのが最良の方法ですが、それは集中的な計算を数時間または数時間行うことが考えられる場合のみです。だから、C#を使う方が簡単で速くなるかもしれません。

+2

*しかしながら、ドライバのように究極の性能が絶対に重要である場合には、ミリ秒が得られ、C++によって提供される手動メモリ制御が明らかな利点です。* [メモリ使用量の制御が不明であることによる明白でない欠点](http://msdn.microsoft.com/en-us/library/windows/hardware/gg487420.aspx#EFE)を参照してください。 –

+0

@ ta.speot.is:興味深い。それはCでも有効ですか?私の知る限り、ほとんどのドライバはC言語で書かれていて、C++では書かれていないので、ドライバーはC++で提供される多相を打ち負かすvtableを持っていないと分かっているからです... – LightStriker

+0

ありがとう。 – Naresh