[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

6. diffの性能のトレードオフ

GNU diffは効率的に動作します.しかし,状況によってはより 速く,より小さな変更の組を生成させることが可能です.

diffの効率を改善する方法の一つは,コピーの代わりにハードリンク やシンボリックリンクを使用することです.diffは通常,同じファイ ルへの二つのハードリンクやシンボリックリンクは内容が同じはずなので読み込 む必要がないため,これで効率が改善します.例えば,大きなディレクトリ階層 をコピーして,コピーに対しいくつか変更して,そしてオリジナルとコピーを比 較するのに`diff -r'を使用することが多いと仮定します.オリジナルのファ イルが読み込み専用の場合,ハードリンクやシンボリックリンクを使用してコピー を作成する(例えば,GNU `cp -lR'や`cp -sR'を用いる)ことで, 効率をかなり改善することが可能です.コピーのファイルを最初に編集する前に, リンクを切って,通常のコピーで置換すべきです.

ファイル比較の方法を変更するオプションを与えることで,GNU diffの効率に影響を与えることも可能です.これらのオプションは, 他のものを犠牲にして効率改善の見地で実装されていたり,他のものに害を与え ながら,場合によっては効率を改善したりします.

GNU diffが変更された行を決定する方法は,常に最小限の差異 の集合で見つけ出します.通常それは,実用的な目的としては十分です. diffの出力が大きい場合,より小さな差異の集合を生成するために, diffを修正されたアルゴリズムで使用したいかもしれません. `-d'や`--minimal'でこうなります.しかし,通常は diffの実行が遅くなるので,デフォルトの動作ではありません.

比較しているファイルが大きく,全体を通じて変更部分の小さな集合が点在して いるとき,diffが使用するアルゴリズムとは異なる変更を行なう, `--speed-large-files'を使用することも可能です.入力ファイルが一定 して小さな密度で変更されているとき,このオプションで出力を変更することな く比較の速度が向上します.そうでない場合,diffは大きな差異の組 を生成するかもしれません.しかし,出力は正しいままです.

通常diffは,差異部分の最小組を見つけようとする前に,両方のファ イルに共通な最初の部分と終りの部分を破棄します.これでdiffの実 行は速くなりますが,最小の出力ではなくなることもあるでしょう. `--horizon-lines=lines'オプションは,diffが最初の 部分の最後のlines行と終りの部分の最初のlines行を破棄すること を妨げます.これで,diffはより最小の出力を見つけることになるで しょう.

変更された行に連続する行が含まれていて,それ以外では同一行が連続している と仮定してください.diffコマンドは,hunkに含まれてる連続した同 じ部分を自由に選択します.この場合,diffは通常,隣接するhunkを マージするときはhunkの境界の位置を変更したり,hunkの行をファイルの終りま で位置を変更したりします.hunkのマージは出力行の見栄えを良くすることもあ るはずです.


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Akihiro Sagawa on January, 21 2003 using texi2html