2009-04-18 10 views
7

私のuses節ができるだけ小さいと個人的には好きですが、多くのアプリケーションでは、少なくとも別のユニットでは、FormsVirtualTreesのような非常に大きな単位が実行可能に膨らんでいます。削除されたユニットがまだ他のユニットで使用されている場合は、uses節をクリーンアップすると効果がありますか?

So:最後にプロジェクトからユニットが削除されていなくても、uses句をクリーンアップすると違いがありますか?もしそうなら:どんなやり方で?そして:uses節をできるだけ早く掃除するか、偶然に未使用のユニットを見つけるまで待つことができますか?

答えて

14

プロジェクト内の他の場所で使用されている場合は、より読みやすいコードを作成することを除いて、大きな違いはありません。しかし、それが影響を与えるかもしれない小さな事がいくつかあります。

コンパイル順序:コンパイラは、どの単位がどの単位を使用するかに基づいて単位をコンパイルする順序を決定します。初期ユニットのuses節からユニットを削除すると、コンパイルサイクルの後半で使用ユニットがコンパイルされる可能性があります。これはあまり聞こえないかもしれませんが、初期化セクションは、ユニットがコンパイルされたのと同じ順序で実行されることに注意してください。しかし、これは本当にあなたのプロジェクトに大きな違いをもたらすはずはありません。

CodeInsight:コード補完ドロップダウンをプルアップすると、現在利用可能なすべてのユニットに基づいて選択肢が提供されます。フィルタリングする選択肢の数を減らすことができます。つまり、使用しているユニットの数を減らすことで、血まみれのものを引き上げるのにかかる時間を短縮できます。 (いいえ、私は苦いではありません。どうして頼むのですか?)

+0

*コンパイラは、どのユニットがどのユニットを使用しているかに基づいてユニットをコンパイルする順序を決定します。*計算の複雑さ、したがって時間が減ります。しかし、注目に値するとは思わない。 –

9

一般的にいいえ。ユニットがプロジェクトのどこでも一度だけ使用されている場合は、それが何回使用されたかは関係ありません。逆に、もしユニットが少なくとも一度はどこかで使用されている場合、そのユニットをいくつから削除するかは関係ありません。コンパイルされたプログラムは同じように動作し、おおよそ同じサイズになります。

唯一の違いは、ユニットの初期化セクションとファイナライズセクションの順番になります。ユニット使用順序は、セクションが実行される順番に影響を与えますが、正確な結果は決して文書化されていません(初期化順序に依存しないようにしてください)。

あなたのユニットリストをクリーンアップすることをお勧めします。同じ理由で、変数リストとパラメータリストをクリーンアップすることをお勧めします。あなたが必要としないものを取り除くと、読んでいるものがコードの内容を正確に把握できるということを合理的に確信できるので、保存したコードを読みやすくなります。あなたのコードがたくさんのユニットを記述しているにもかかわらず、それらを実際に使用していない場合は、次回、あなたや他の人がコードを見るときに、あなたのコードが施設を使用する場所を探すのに時間を費やすことになりますそれらのユニットの(あなたは自分自身に言うでしょう、このコードにはGraphicsが含まれていますが、どこに何が描画されるのかわかりません。私はこのコードにそのような責任はないと考えて別の見方をするのが良いでしょう。同僚 - あなたの日から時間をかけて、このユニットがどこを引き出すのか教えてください)」

4

無料のパスカルアナライザを使用してコード内の未使用のユニットを調べます。

+3

実際には、ICARUSを使用してコード内の未使用のユニットを見つけることを提案することを意味します。同じ会社から。 – Mick

+3

http://www.peganza.com/products_icarus.htm – Mick

5

はい、しばしば見落とされ、バックであなたをかむ来ることができ1トリックがあります:コードがない場合でも、それは常にを実行され、
をいくつか初期化/ファイナライズコードがある場合それ以外の場合はあなたのユニットで呼び出されます(ユニットは常にとなりますが、そうは思われません)。したがって、プロジェクトで必要としないユニットを削除すると、大きな違いが生じる可能性があります。

注目に値するもう一つは、ユニットの順序が同音異義語は、2個の異なる単位である場合、コンパイラは秒を選ぶと、あなたがいつもやるべき(ユニット名に接頭辞せずにコールIDが決定ということですベストプラクティスとして)。

それ以外は、MasonとRobが指摘したように、ユニットの順序は、コンパイルされる順番と初期化/ファイナライズの順序に影響します。

コードの洞察としては、不要なユニットを削除したほうが高速ですが、プロジェクトで使用されているすべてのユニットが、検索パスに頼って検索するのではなく、明示的にdprに追加されている場合他のユニットを介して暗黙的に追加されました。

+0

しかし、DPRにファイル参照を追加する際の制限はどこですか?つまり、クラスとダイアログのような標準のVCLを追加しないということです。第三者のコンポーネントまたは独自のコンポーネントはどうですか?私のプロジェクトは巨大で、私はまだ高速なコードインシデントが必要です。 –

+0

経験則として、私はVCL /インストールされているサードパーティコンポーネントの一部ではないすべてのユニットをdprに追加します。それらは図書館の道にあります。あなたが本当に検索パスを必要としないように、他のすべてが明示的に追加されます。もちろん、YMMV、特にあなたがすべてと残りのものをコンポーネント化する場合は... :) –

5

メイソンとロブの意見は一致しません。違いがあります。

依存関係の削減。

違いは現在のプロジェクトではMasonとRobの説明のとおりです。代わりに、違いはあなたのNEXTプロジェクトにあります。あなたの(クライアント)ユニットに不要な(サーバ)ユニットを残しておけば、そのクライアントユニットを別のプロジェクトで使用すると、依存関係も引き込まれます。あなたが引っ張ったユニットの他の正当化されたクライアントユニットがない場合、あなたは鼓動を追加しました。

+0

十分に公正ですが、留意すべき2つのことがあります。まず、彼は具体的にプロジェクトのどこかで使用されているユニットについて話していました。明らかにあなたが言うことは正しいですが、質問の範囲外です。第2に、スマートリンカは、初期化セクションにない限り、通常は未使用のユニットを完全に排除することができるため、依存性の肥大化はそれほど大きな問題ではありません。 –

関連する問題