2013-07-22 6 views
11

未使用のユニットを自動的に削除する方法は、というセクションをDelphi XE2のプロジェクトのすべてのソースファイルに使用していますか?Delphi XE2のすべてのソースファイルから未使用のユニットを削除するには?

P.S.それ以降はIDEがはるかに高速に動作します。

+2

質問はより正確に行われます。 「保留中」フラグをキャンセルしてください。この質問はDelphiの大規模なプロジェクトでは非常に重要です。答えはすべての開発者にとって非常に役立ちます。 – Dmitry

+1

"未使用ユニット"の意味を正確に定義できますか?初期化コードを持つユニットは、エクスポートされたシンボルを参照しなくても、プログラムに影響を与える可能性があることに注意してください。 –

+3

ユニットを自動的に取り外すことは、あなたが思っているほど単純ではありません。ユニットの中には何も呼び出されていないように見えても、必要なことをする初期化セクションがあります(例えば、COMを設定するために 'CoInitialize'を呼び出すなど)。 (あなたが手動で 'CoInitialize'を手動で呼び出すことができるのは分かりますが、その点はユニットが何をしているのかを常に自動的に伝えることができないということです) –

答えて

14

これを完全に自動化する方法はありません。

は、私はそのウィザードを取るアプローチを知ってるいくつかのツールがあります。

  • CnPack Uses Units Cleaner
  • Peganzaのパスカルアナライザ

    (と、それは相棒イカルスです)。
  • Lazarus IDEにはCodeToolsパッケージに「Unused Units」ダイアログがあります。

ペガザのツールは、単にレポートを表示します。 CnPackは未使用のユニットを削除するように促しますが、確認する必要があります。 Lazarusはユニットのリストをあなたに提示しますは未使用であり、それらのいくつかまたはすべてを削除する選択肢を与えます。

なぜ自動化されないのですか?

これは静的解析であるためです。最も洗練されたツールであっても、ユニット全体ではなく実行時に特定のコード行が使用されるかどうかを100%確実に判断することはできません。これらのツールは、この偉業を達成するために独自のパーサーを実装していますが、それは愚かな証拠ではありません。

いずれにしても、uses節をクリーンアップする主な利点は、ソース自体とコード補完機能の両方から視覚的な混乱を取り除くことです。はい、コンパイル中にいくつかのパフォーマンスが得られ、特定のIDEバックグラウンド操作はわずかに高速化されますが、IDEが奇跡的にスピードアップすると思うと、あなたは失望するでしょう。独立に加工することができる小片にプロジェクトを壊す

  1. あなたがすることで、より良いIDEとコンパイラの性能が表示されます。

  2. 重複するコードを削除します。
  3. 不要なIDEパッケージを無効にします。

私は確かに、未使用のユニット参照を削除することを断念するつもりはありません。私が言ったように、それはあなたのソースをunclutterするのに役立ちます。あなたが正しい理由でそれをやっていることを確認してください。

+0

私はCnWizardsを使用しましたが、あまりにも多くを取り除く傾向があります –

+0

私たちはすでに特別に設計されたツールでこれを行いました - そしてIDE速度は何度か増加しました。コンパイルプロセス - 約5回。 (しかし私はこのツールを別のプロジェクトに使うことはできません。) – Dmitry

4
私は自動的に使用方法のセクションで、不要なユニットをリッピングしまうツールをしたいとは思わない

...

けど...フリーウェアを...それらを識別イカルス見てそこのツールがありますhttp://www.peganza.com/downloads.htm

+0

[' the description'] //www.peganza.com/products_icarus.htm)は、ICARUSがDelphiやBorland Pascalのソースコードを解析し、Uses Reportを生成すると述べています。 – TLama

+0

@TLamaでは、「未使用」のユニットを自動的に削除するとプログラムが壊れることがあります。直接使用されていない派生クラスを登録するユニットを想像してください。 Peganzas Pascal Analyzer(Icarusの一部です)の長い時間と幸せなユーザーとして、私は自動除去がないことを嬉しく思っています。 –

+0

@Uwe、私は危険を知っていますが、CnWizardの 'Use Cleaner'は、あなたが削除したいファイルを選択することができる[これのようなダイアログ](http://i.imgur.com/8WoWEb7.png)を提供しますリストを使用してそれを進めてください。それは完全に自動化されていません。ファイルを選択して削除するのはあなたのものです。イカルスからの報告書では、手動ですべての作業をしなければならず、それは面倒です(そして、この質問で質問されたように、未使用のユニットを自動的に削除する方法)。 – TLama

4

CnPackには、ユニット単位で問題なく使用していた「クリーナーを使用...」オプションがあります。また、私はプロジェクトの規模のために試していない、プロジェクト全体を行う能力を持っています。

+0

私はCnWizardを使用しましたが、複雑なプロジェクトではあまりにも多くのものを削除する傾向があります。 –

+1

ちょうどヘッドアップ。作業を行うプロセスはメモリをリークしますので、あなたがベルリン以上にいない限り、しばらくするとメモリの問題に陥る可能性があります(特にProjectGroupsを使用するとメモリがリークするようです)。 –

11

Delphiユニット依存性スキャナ(DUDS)というユーティリティがあります。プロジェクト全体をスキャンし、ユニットと依存関係の完全に検索可能なツリーを構築します。未使用のユニットを見つけるのに非常に役立ちます。

このアプリケーションはフリーウェアであり、hereと見なすことができます。

免責事項 - 私は著者です。

+3

あなたがやったことは素晴らしい仕事です! +1 – RBA

+0

非常に便利です!ありがとう! – Nix

関連する問題