12

私は上級開発者なので、これはばかげた質問に思えます。私の答えはNO、または何ですか?いいえ!!!

しかし、私は昨日会議に出席していて、PMD の結果を説明していました。「メソッド名が長すぎる」問題が発生したとき、私が説明を始めたところ、顧客は次のように言いました。長いメソッド名はパフォーマンスに影響を与えることを覚えておいてください。プログラムの実行が遅くなります。

私は言った: いいえ、あなたは間違っています。それは単なるクリーンなコード ルールであり、優れたコードを取得するために重要ですが、パフォーマンスとは何の関係もありません。バイトコードは似ていますが名前が異なります。

しかし、クライアントは、会議でこれについて議論していた何人かの人々が、これについて確信していました. 彼らは、長いメソッド名がパフォーマンスの低下の原因であるといういくつかのプロジェクトを持っていました。

私が持っている唯一の考えは、いくつかの内省または反省がこれに関連しているということですが、これとは別に、確かに、または確かだと思っていました。メソッド名の長さはパフォーマンスに影響しません。

これについてのアイデアや提案はありますか?

4

6 に答える 6

19

おそらく、メモリとストレージにより多くのスペースが必要になります。たとえば、巨大なメソッド名を持つクラスを含む jar ファイルは、短いクラス名を持つものよりも大きくなります。

ただし、パフォーマンスの違いはほとんど目立ちません。パフォーマンスの悪さを長いメソッド名のせいにしていたプロジェクトが、実際には誤診されていたことはほぼ確実だと思います。そんなことは初めてではありません。

もちろん、この状況から熱を取り除く最善の方法は、証拠を提供することです。パフォーマンスが重要な場合は、パフォーマンスのテストを行う必要があります。これらのテストを長いメソッド名で実行してから、それらを短いメソッド名にリファクタリングして、テストを再実行します。大きな違いがあったとしたら、私は信じられないほど驚くでしょう。

于 2011-11-12T18:45:05.473 に答える
4

メソッド名は、リフレクションだけでなく、クラスのロード中にも関連します。もちろん、どちらの場合も、長いメソッド名は、あるレベルで CPU が行うべきことがもっとあることを意味します。ただし、メソッド名の長さは少しでも実用的です (つまり、数千文字ではありません)。リフレクションまたはクラスのロード中に実行する必要がある他のことと比較して、これが重要になることは絶対にありません。

于 2011-11-12T18:48:10.090 に答える
1

クラス名とメンバー名を短くすると、起動時間にプラスの影響があります。そのために、バイトコードシュリンクを使用できます。

たとえば、yguard(LGPL)はコードを縮小できます。また、デバッグ目的でスタックトレースの難読化を解除することもできます。

もちろん、パフォーマンス上の理由から短いクラス名とメンバー名を手動で割り当てるのは恐ろしい考えです。

于 2011-11-14T09:46:33.900 に答える
1

しかし、クライアントは、会議でこれについて議論していた何人かの人々が、これについて確信していました. 彼らは、長いメソッド名がパフォーマンスの低下の原因であるといういくつかのプロジェクトを持っていました。

事実として扱われている完全な推測のように聞こえます。これは、一部の人々のパフォーマンスに関する一般的な狂気のほんの一例です。 たまたま正しかったとしても、それは完全な推測です。

すべてのプログラムには、特定のものを変更することでパフォーマンスを向上させる余地があります。推測は、それらが何であるかを知らせません。

同じことを行う 2 つのプログラムのパフォーマンスが異なる場合、それはそれらが異なる程度に最適化されていることを意味するだけです。あなたの課題は、これを説明することです。

于 2011-11-13T00:31:36.927 に答える
0

リフレクションを通じてメソッド名を自分で引き出してUIにレンダリングしない限り、パフォーマンスに大きな影響を与える可能性がある理由はわかりません。明らかにそうではありません。だから私はただ混乱しています。あなたのクライアントはメソッド名とファイル名を混同していませんか?それとも、非常に古いプログラミング言語が超長いメソッド名をサポートしていない場合について考えていますか? その人の年齢にもよりますが、コンピューター科学者にとって彼らの判断は間違いなくばかげています。事実で主張を証明できる場合は、ACM、Oracle/Sun、または MIT に提出して、調査結果を検証することもできます。

于 2012-01-25T05:24:15.507 に答える
0

関数名の長さがパフォーマンスに与える影響は次のとおりだと思います。

  1. バイトコードからバイナリ コードへのコンパイル時間 (java、.net、.. を使用)。バイト コードには、ファイル名、クラス名、パッケージ名が含まれています。
  2. *.lib、*.dll、*.so を使用すると、パフォーマンスに影響を与える可能性があります (Android でネイティブ コードを使用する場合など)。
  3. ネイティブ コードを使用して Java 関数を呼び出す場合 (Java、Android)

ブラック ボックス (lib ファイル、アプリ) が他のブラック ボックス (lib ファイル、アプリ) に接続する場合、ヘッダー ファイルの関数名を識別情報として使用します。そのため、名前の長さはパフォーマンスに影響すると思います。

于 2015-09-20T02:16:39.167 に答える