質問

最適化されたコード、実装の明確さ、効率、および移植性の観点から設計のトレードオフを正当化する場合、どのように選択しますか?

この質問の目的に関連する例は、「大きなファイル」が「かなりの数GB」ですランダムアクセスメソッドを使用して簡素化される問題の場合。

このファイルの読み取りおよび変更のアプローチは次のとおりです。

  1. とにかくストリームを使用して、目的の場所を探します-ポータブルですが、潜在的に遅く、明確ではありません-これは実質的にすべてのOSで動作します。
  2. ファイルの関連部分を大きなブロックとしてマッピングします。たとえば、処理するファイルの50MBチャンクを各チャンクにmmapします-これは、そのシステムにmmapを実装する微妙な方法に応じて、多くのOSで機能します。
  3. ファイル全体をmmapするだけです-これには64ビットOSが必要で、これを実装する最も効率的で明確な方法ですが、32ビットOSでは機能しません。
役に立ちましたか?

解決

何を求めているのかわかりませんが、設計プロセスの一部は、移植性とパフォーマンスの要件を分析することです(他の要因の中でも)。

コードを移植する必要がまったくなく、絶対に最高のパフォーマンスが必要であることがわかっている場合は、それに応じて実装を調整します。それ自身のためだけに移植可能である意味はありません。

パフォーマンスと移植性の両方が必要な場合、各プラットフォームの実装を提供することを妨げるものは何もないことに注意してください。もちろん、これはコストを増加させるので、本当に、ニーズに優先順位を付けるのはあなた次第です。

他のヒント

制約がなければ、この質問には合理的に答えることができません。

「最高の色は何ですか」と尋ねています。あなたが家を描いているのか、車を描いているのか、絵を描いているのかを教えてくれません。

制約には少なくとも次のものが含まれます

  • 選択する言語
  • ターゲットプラットフォーム(マルチCPU産業グレードサーバーまたはiPhone?)
  • 速度メモリ
  • の最適化
  • コスト(誰がこれに資金を提供しており、配信に制約がありますか?)

「究極の」ソフトウェアを持つことのできるソフトウェアはありません。移植性。

さまざまな方法を使用して処理されるこの種の問題の例ですが、必要な特定の入出力と「最高」の測定の両方に厳しい制約があります。 WideFinder プロジェクトになります。

基本的に、コーディングする前にまず考える必要があります。すべてのプロジェクトはユニークであり、ニーズの分析はそのプロジェクトの原始的なものを決定するのに役立ちます。どのプロジェクトにとって最良のソリューションになるかは、いくつかのことに依存します...

まず、このプロジェクトはマルチプラットフォームにする必要がありますか、それとも最終的にマルチプラットフォームにする必要がありますか?選択に応じて、適切なプログラミング言語を選択する方が簡単です。また、プロジェクトで複数の言語を使用することもできますが、これは完全に正常です。移植性は必ずしもパフォーマンスの低下を意味するわけではありません。それが意味するのは、高品質のコードが必要になるため、目標を達成するためのより困難な作業が含まれることです。また、すべてのプログラミング言語には独自の哲学があります。彼らが何であるかを学びます。確かなことは、特定の問題が頻繁に繰り返し発生することです。これが、異なるデザインパターンを知ることが時々違いを生むことができる理由ですが、一部の言語には独自のイディオムがあり、言語を選択するときに非常に関連性があります。もう少し考えが必要なのは、プロジェクトで使用できるさまざまなアプローチです。マルチスレッド、ソケット、クライアント/サーバーシステム、およびその他の多くのテクノロジーがすべて使用できます。適切なテクノロジーを選択すると、プロジェクトの改善に役立ちます。

ニーズと今日利用可能なさまざまなソリューションを知ることは、さまざまなトレードオフを選択する時期がいつ来るかを決定するのに役立ちます。

それは本当にプロジェクトのドライバーに依存します。社内のエンタープライズ開発を行っている場合は、ターゲットで一生懸命働く最も簡単なことをしてください。必要に応じてパフォーマンス要件のMod。

1日目に異なるハードウェアプラットフォームをサポートする必要があることがわかっている場合は、明らかに、移植可能な実装を選択するか、複数のアプローチを使用する必要があります。

ポータビリティのためのポータビリティは、創業以来Javaのマーケティングの呼びかけであり、慣例によりCの生活の事実であり、それに従っているほとんどの人が「成長した」と信じています。 JavaまたはCでそれを言うでしょう。

しかし、本当のことですが、絶対的な移植性は、複雑度が中程度のほとんどのアプリケーションからほとんどのアプリケーションにのみ当てはまります。複雑度が高い場合は、特別な調整が必要です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top