Build Cache - プロジェクト構造が効率に与える影響

この機能は、IncredibuildのEnterprise PlanとBusiness Planでのみ利用可能です。

プロジェクトで使用する要素やプロジェクトの設計方法は、Build Cacheのパフォーマンスに大きく影響します。

コードに以下のような要素がある場合は、これらの要素や構成がある場合とない場合でビルドを実行し、Build Cacheがどのような影響を受けるかを確認することをお勧めします。

ビルドツールの使い分け

Visual Studioの各リリースには、独自のツールチェーン(コンパイラ、リンカ、その他のツール)が含まれています。複数の イニシエータ で共有 Build Cache を使用していますが、異なるビルドで異なる Visual Studio リリースを使用している場合、キャッシングのミスが多発する可能性があります。例えば、開発者がCI環境と異なるツールチェーンを持っている場合、CIがキャッシュに置くコンテンツのメリットはありません。

ビルド構成の使い分け

異なるターゲット(デバッグとリリース構成、異なるCPUアーキテクチャなど)用にビルドすると、異なるコードが生成されます。リリース構成用のビルドには、デバッグ構成で生成されたキャッシュ コンテンツメリットはありません。

Build Cacheは、結果の成果物に影響を与える可能性のある他の要因も考慮します。例えば、コマンドラインオプションや環境変数によって、コンパイルやその他のタスクのビヘイビアが変化する場合があります。まったく同じコードを、-DRUN1で実行するものと、-DRUN2で実行するものと、2つのコンパイルを検証してみましょう。Build Cacheは、これらの異なるタスクを考慮しています。

Managed C++

Managed C++ファイルは、デフォルトではBuild Cacheによってスキップされます。これらのファイルのキャッシュを有効にしたい場合、カスタマーサポートにご問い合わせください。

リンク キャッシング

リンク キャッシングはサポートされていますが、ほとんどの環境でビルド キャッシュのパフォーマンスが低下するため、デフォルトでは無効化しています。しかし、プロジェクトに多くのDLLや滅多に変更されない実行可能ファイルが含まれている場合は、リンクキャッシュを有効にした方がいい場合もあります。その場合は、カスタマー サクセス マネージャーに連絡して、リンクキャッシュを有効化してしてください。

事前コンパイル済みのヘッダー(PCH)

事前コンパイルされたヘッダーは完全にサポートされていますが、定義方法によってはBuild Cacheのパフォーマンスに影響を与える可能性があります。PCHに頻繁に変更されるヘッダーが含まれている場合、ほとんどのビルドでPCHを再コンパイルする必要があります。つまり、PCHに依存するソースコードも再コンパイルが必要になり、ビルドキャッシュのヒット率が低下する場合があります。

詳しくは、事前コンパイルされたヘッダーが効率にどのように影響するのか をご覧ください。

ユニティ ビルド

ユニティ ビルドはサポートされていますが、ソースのDOE統一スキームによってはBuild Cacheのパフォーマンスに影響を与える可能性があります。関連性のないソースコード ファイルがまとまってしまい、一部のファイルが頻繁に変更される場合、まとまったコンパイル全体を何度も実行する必要があります。従って、Build Cacheのヒット率が低下する可能性があります。

プロジェクトでユニティビルドを使用する場合、頻繁に変更されるソースファイルとほとんど変更されないソースファイルをまとめてしまわないように注意してください。

自動生成コードとコメントの無視

自動生成コードは完全にサポートされており、通常、Build Cacheの効率を低下させることはありません。

自動生成コードは、ファイルの先頭にあるタイムスタンプなどのコメントを除き、ほぼ同じになる可能性があります。キャッシュヒットを提供できるかどうかを判断する際、これらはコンパイル結果に影響しないためIncredibuildはこれらを無視します。

注意:ファイル内のコード行の以降のコメントに変更がある場合、そのファイルは異なるものとみなされ、キャッシュミスを登録します。

Build Cache ヒット/ミスのレポートを使用して、自動生成コードに起因する予期せぬキャッシュ ミスを分析します。

マクロの使用

Build Cacheを使用してビルドされたプロジェクトは、Build Cacheを使用せずにビルドされた場合とまったく同じ動作をします。唯一の例外は、DATE__、__TIME__、__FILE__、__TIMESTAMP__などのマクロを使用するコードです。

これらのマクロは、値を含むコードがコンパイルされるたびに異なる値を生成します。通常、これらのマクロは、プログラムが -versionオプションをつけて実行される際に表示されるメッセージのように、コンパイルされた時刻を示すためにデバッグやバージョン メッセージで使用されます。

Build Cacheは、これらのマクロを含むコードを一度コンパイルし、結果のオブジェクト ファイルを、コンパイル時の値をオブジェクト ファイルに埋め込んだ状態でキャッシュに保存します。

後ほど同じプロジェクトを再構築するとき、Build Cacheはキャッシュの内容をそのまま再利用します。つまり、結果として得られるイメージは実際のコンパイル時の値ではなく、オブジェクト ファイルがキャッシュに置かれた際の元のコンパイル時の値を求めます。