Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

C# のビルドが20分くらいかかってしまいます。

Q&A

Closed

解決したいこと

ASP.NET MVC5 でウェブアプリケーションを作成しているのですが、ビルドの完了までに20分くらいかかってしまいます。ウェブアプリケーションの規模が大きくなるとともに、ビルドにかかる時間も増えてしまい、これでは開発、勉強が進みません。同じように、ASP.NETで開発している方はどのように開発しているのかご教授いただきたいです。

環境

VisualStudio2019
.NET5

MacBook Air (M1, 2020)
macOS BigSur11.2.3
RAM 8GB

自分で試したこと

調べたのですが、数十秒のビルドを短縮するというようなものしか見つけられず、自分には該当しないと思いました。

考えたのですが、
1,PCのスペック不足
2,コードに無駄がある
3,毎回すべてビルドされている。差分ビルドされていない
4,一つのプロジェクトに全て書くのではなく、複数のプロジェクトに分けて書くべき
5,そもそもビルドには時間がかかる。完成までは小さい規模で開発とテストを行う

ご教授いただければ幸いです。よろしくお願いいたします。

2021/07/11
たくさん解決方法をご教授いただいたので、勉強し試す時間のため一度Closeします。
ありがとうございました!😊

0

4Answer

こちらの記事『ビルド時間が10倍の工数を奪う』に何点か候補を挙げております。

  • 開発PCのスペック(メモリ/CPU)を上げる。
    • 私の開発環境はこれでかなり改善しました。ソースコード検索も速くなります。
    • メモリを8GBから16GBに上げることで、7分が2分に短縮されたという改善例もあります。
  • なんとなく、あるいはテストのためだけに public にするのをやめる
  • ソースプロジェクト(ビルド単位)を分ける
  • デッドコードを削除する
  • コードクローンを除去する
  • 埋め込みリソースを多用している場合は外部リソース化を検討する。
  • ビルドツールを並列実行させる(MSBuild 例
  • ビルド高速化ツールを導入する
    • IncrediBuild は無料版でも効果を発揮しました。古いIDEですが、特にVS2008では効果があり、6分かかっていたのが2分弱になりました。
  • 実行時間の長い単体テストを見直す
  • ソースコードのある作業フォルダをアンチウィルスソフトの検疫から除外する

即効性があって確実性が高いのは、PCのスペックを上げることでしょうか。
ただし、対症療法的であり、開発メンバーが多いと費用もかさみます。

IncrediBuild のトライアル版は、30日を過ぎても1コアの制限付きで使用でき、それでも環境によって効果がありました。
最近のライセンス体系については把握しておりませんので、ご興味がありましたらWebサイトやサポート窓口で確認してみてください。
仮にあまり効果がなくても、複数プロジェクトのソリューションであれば、どのプロジェクトで時間がかかっているかを視覚的に確認することができます。(今回のケースは単一プロジェクトのようですが)

本質的な対応としましては、アクセシビリティ(public/internal/protected/private)の見直し、コード量の削減など、リファクタリング(コード体質改善)が対策として挙げられます。
対応に時間はかかりますが、メンテナンス性向上、改修費用削減など、ほかの恩恵も期待できます。

あと、これは応急処置的ですが、Visual Studio を立ち上げた状態で msbuild を実行すると、IDE上でビルドするよりも少しビルドが軽く、速く済み、そのままデバッグ実行もできます。

※私の開発環境は Windows ですので、macOS で事情の異なる点がありましたらご容赦ください。

1Like

Comments

  1. @SaintMAX

    Questioner

    ご回答ありがとうございます。
    PCのスペック不足の可能性があるということですね。。。
    色々と対応策をリンクも付けてご教授いただき助かります。
    まずはアクセシビリティやソースプロジェクトの見直しをしてみます。
    今は自分ひとりで開発しているのですが、チームでの開発となれば
    メンテナンス性は今以上に必要だと思うので、教えていただいたことを
    ひとつずつ勉強していこうと思います。

    お返事が大変遅くなり申し訳ありませんでした。
    詳しく書いていただきありがとうございましたm(_ _)m

Visual Studio 2019 for Macは、まだM1に最適化されていないようです。
お困りでしたら、8.10(プレビュー版)を試してみてはいかがでしょうか?
Developing on a M1 Mac with Visual Studio for Mac

Visual Studio Codeは、M1にも対応しているようですので、こちらを使用してみるのも良いかも知れません。
Visual Studio CodeでC#プログラム開発環境構築【Mac】
※Visual Studio Codeは、ただのテキストエディタですので、ビルド時間には直接関係はありませんが、以下の推測に基づくものです。

  • Visual Studio 2019は、多機能が故にCPUを非常に消費するため、VS Codeに変更することでそのぶん空いたCPUを使用できる=ビルドが高速化される可能性があります。

  • .NET5.0の最新バージョンでは、Visual Studio 2019に同梱されていた旧バージョンよりもパフォーマンスが改善している=ビルドが高速化される可能性があります。

私はWindowsユーザーのため、Macのノウハウはございませんが、ご参考になれば幸いです。

1Like

Comments

  1. @SaintMAX

    Questioner

    ご回答ありがとうございます!

    VisualStudio for MacはM1に最適化されていなかったのですね。
    ご教授いただいたように8.10プレビュー版を試してみます。

    VisualStudioCodeでは試していたのですが、たしかに5分ほど早くなりました。

    お返事が遅くなり申し訳ありませんでした。
    大変参考になりました。ありがとうございました!m(_ _)m

20分もかかる規模となると

一つのプロジェクトに全て書くのではなく、複数のプロジェクトに分けて書くべき

が大きいと思います。
まずはクラスの依存関係を整理して外部依存の少ないクラスを別プロジェクトのDLLにしてみましょう。
一つのクラスに多くのメソッドを盛り込みすぎているものも見直した方がいいですが、それを複数のクラスに分割するのは手間がかかる上に動作の再チェックも大変でしょうから…

1Like

Comments

  1. @SaintMAX

    Questioner

    ご回答ありがとうございます。

    恥ずかしながら、DLLを初めて聞きました。
    DLLについて詳しく調べ、使ってみます。
    クラスの依存関係、メソッドの数も整理して見直してみます。

    お返事が遅くなり申し訳ありません。
    具体的な解決策をご教授いただきありがとうございました!m(_ _)m

どういうソースコードでどういうライブラリを使ってるかがわからないので何とも。。。。

一般的に考えると
1.巨大なライブラリを数十個レベルで使っている。
2.1つのファイルサイズが大きいそれに数が多い(1ファイル数万行のファイルが数十ある等)

特に2の時はたとえ数行の変更でもファイル全体をビルドするため時間がかかるでしょう。

0Like

Comments

  1. @SaintMAX

    Questioner

    お返事が遅くなり申し訳ありません。
    ご教授ありがとうございます。
    パッケージの数を15個から4つ外したのですが、変わりませんでした。
    数万行のファイルは一つもありません。
    もう少し自分で調べてみようと思います。

Your answer might help someone💌