3

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

この質問の目的に関連する例は、大きなファイルの処理である可能性があります。ここで、「大きなファイル」は、ランダムアクセス方法を使用して単純化される問題の「かなりの数GB」です。

このファイルを読み取って変更するためのアプローチは次のとおりです。

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

5 に答える 5

4

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

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

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

于 2009-06-23T23:24:44.113 に答える
2

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

家を描いているのか、車を描いているのか、絵を描いているのかを教えずに、「最高の色は何ですか」と尋ねています。

制約には少なくとも

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

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

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

于 2009-06-23T23:22:41.370 に答える
2

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

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

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

于 2009-06-24T05:48:11.603 に答える
1

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

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

于 2009-06-23T23:26:08.260 に答える
0

移植性のための移植性は、Javaのマーケティングの目的であり、慣例によりCの現実であり、JavaまたはCで「成長」したほとんどの人がそう言うと思います。

ただし、確かに、絶対的な移植性は、中程度の複雑さを持つ最も些細なものからほとんどのアプリケーションにのみ当てはまります。複雑性の高いものには、特別な調整が必要になります。

于 2009-07-10T03:05:17.140 に答える