2

これはデータのハードコーディングの効率に関する一般的な質問です。Java で化学分析を行うプログラムを作成しており、さまざまな元素の同位体存在量を使用する必要があります。私が現在設定している方法は、すべての値(変更する必要がない)がクラスの最終フィールドとして保存されることです。つまり、

static final double C12Abundance = .989;
static final double C12Mass = 12;

同様のプログラムの多くは、このタイプのデータを XML ファイルに保存し、次のようにそこから値を読み取ります。

<compounds>
<elements>
    <element symbol='C' mono_isotopic_mass ='12.00000000000' abundance='.989'/>

この方法で読み取る理由 (パフォーマンス、メモリなど) はありますか? フィールドのままにしておく方が簡単なようです。

4

8 に答える 8

2

ハードコーディングは、パフォーマンスとメモリ割り当ての点ではるかに高速です。

ファイルから読み取ることで得られるのは、コードの再利用性です (プログラムを再コンパイルすることなく、さまざまなパラメーターを指定して実行できます)。

ファイルからの読み取りには、次の手順があることに注意してください。

  1. 値を格納するために使用する変数を宣言します。
  2. 入力 (ストリーム) オブジェクトを作成する
  3. パスで初期化する
  4. FSからファイルを開く
  5. 読み取る正しい行を見つける
  6. 値を読む
  7. 上記の変数に格納します
  8. 入力 (ストリーム) を閉じる

これは、コンパイル済みの最終変数に値を設定する代わりに、かなり大きなオーバーヘッドです。

于 2013-07-25T13:23:29.617 に答える
1

値をハードコーディングして変更したい場合は、プログラムを再コンパイルする必要があります。これが問題です。ファイルからデータを読み取ることには、次の利点があります。

  • データが変更されるたびにプログラムが再コンパイルされるのを待つ必要はありません。かなり大きなプログラムの場合、これには時間がかかることがあります。
  • ユーザーは、ソースにアクセスしなくてもデータを変更できます。
  • 構成ファイル名を変更するだけで、異なるデータセットを切り替えることができます。

たぶん、これはあなたには関係ありません。次に、先に進んでデータをソースに入れます。

プロファイラーがそう言う場合を除いて、パフォーマンス自体 (プログラムのパフォーマンスなど) は決して問題ではありません。しかし、起動時に小さなデータ セットのデータ ファイルを読み取るのがどのように長いプロセスになるかはわかりません。そのため、違いはないと確信しています。

于 2013-07-25T13:23:39.460 に答える
1

C12 の量が異なる宇宙をシミュレートしたい場合は、値をハードコードすると、プログラムを再コンパイルする必要があります。

他の理由も考えられます: 値が外部ファイルから読み取られる場合、そのファイルはドキュメントとして機能し、外部ファイルはエラーのチェックが容易である可能性があり、ファイルを生成するツールや実行以外の目的で使用するツールがある可能性があります。あなたのプログラム、...

于 2013-07-25T13:26:08.217 に答える
0

構成ファイルにはプロパティが保持されます。一般に、これらのプロパティは時間とともに変化します。あなたの場合、定義上、それらは固定されており、決して変更されることはないと思います。
このため、私は可能な限り簡単なことを行います。それは、それらをフィールドのままにしておくことです。

これはパフォーマンスの問題ではありません。パフォーマンスが問題にならない限り、コードベースで何がより使いやすくなるかの問題です。

クラス内のこれらの値を定数として抽出することをお勧めします。そうすれば、いつでもインポートして値にアクセスできます。

于 2013-07-25T13:22:39.793 に答える
0

Java コードは Java コンパイラによってのみ読み取り可能ですが、XML は妥当な (つまり XML 対応の) 言語によって読み取り可能です。また、何らかの価値を追加したい場合は、すべてを再コンパイルする必要はありません。

于 2013-07-25T13:22:51.257 に答える
0

個人的には、値が変更されることがなく、アプリが小さい場合は、ハードコーディングを使用します。それ以外の場合は、conf データの外部ソースを選択します。

しかし、人々が価値観は変わらないと私に言うときはいつでも、それは彼らがそうするということを意味しているので、動的な環境を準備することが一般的な方法です. XML conf ファイル、データベース conf テーブルなど。

于 2013-07-25T13:23:00.853 に答える
0

それらを XML で記述する場合、デバイスごとに異なる値を使用できます。たとえば、名前の付いたディメンションがありitem_margin、デバイスの幅に基づいて異なる必要があると仮定すると、これが得られvalues/dimens.xmlます。

<dimen name="item_margin">0dp</dimen>

最小幅が600 dpのデバイスでは、このマージンを 60 dp にする必要があるため、values- sw600dp /dimens.xml にはこれがあります

<dimen name="item_margin">60dp</dimen>

このように、これらの値はデバイスの幅に基づいて自動的に選択されるため、デバイスの幅を確認して Java コードで適切な値を選択する必要はありません。

于 2013-07-25T13:24:17.993 に答える