drymonfidelia
V2EX  ›  .NET

项目从.NET5.0 升级到 8.0,加起来 1.5 万行代码, Linux 下编译经常要半个小时,有的时候又几秒钟就能编译完, Windows 下一直非常正常,怎么排查?

  •  1
     
  •   drymonfidelia · Mar 26, 2025 · 7973 views
    This topic created in 594 days ago, the information mentioned may be changed or developed.
    服务器是 aws m8g.2xlarge 8 核 32GB 内存
    整个服务器上就一个 Docker ,里面运行这个服务
    以前 .NET 5 的都是秒编译
    现在经常要半个小时,有时甚至五六个小时编译不完
    有时候又能 2 秒编译,不知道为什么
    `docker system prune -a` 运行了好几遍,没效果



    开 Debug 是因为刚才想试试是不是 Release 导致的编译缓慢才改的,并不是导致问题的原因
    Supplement 1  ·  Mar 26, 2025
    看我的 log ,restore 和 build 是完全分开的,restore 最多 50 秒 我用的是 aws ,应该不存在网络不稳定
    35 replies  •  2025-10-09 21:29:33 +08:00
    hez2010
    hez2010
    Mar 26, 2025
    1
    可以试试给 dotnet build 加几个参数:-clp:PerformanceSummary -tl:false
    这样能看到编译时间到底花在了具体哪个任务上
    liuliuliuliu
    liuliuliuliu
    Mar 26, 2025
    2
    这很显然需要一个日志来看看时间都花费在哪里了。
    build 的时候加个参数吧
    dotnet build -bl:SpecificStep.binlog
    supemaomao
    supemaomao
    Mar 26, 2025 via Android
    3
    如果是编译为镜像,那么原因可能是 net8 不支持仿真编译了,你需要更改编译的命令,让其使用交叉编译。这个问题之前遇到过。
    drymonfidelia
    drymonfidelia
    OP
    Mar 26, 2025
    4
    @hez2010 加上了,但是似乎没有输出别的东西
    drymonfidelia
    drymonfidelia
    OP
    Mar 26, 2025
    5
    好奇怪的问题,似乎同一套代码,刚才测试 1 楼的参数 3 分钟就编译完了,现在测试 2 楼的参数又编译了 10 分钟还没出来,每次编译时间完全随机
    v1
    v1
    Mar 26, 2025
    6
    @drymonfidelia 或许是 linux 下编译器的问题呢?而不是项目代码
    netnr
    netnr
    Mar 26, 2025❤️5
    7
    估计是 dotnet restore 下载资源网速不稳定

    改善网络
    外面发布文件,再基于发布文件+runtime 打包,避免编译
    beginor
    beginor
    Mar 26, 2025 via Android
    8
    加上加个 no restore ,不联网检查 nuget 包, 看看是不是网络问题
    tusj
    tusj
    Mar 26, 2025
    9
    说两个微软给我的印象:
    1 、大学时第一次接触 Visual Studio ,进去之后字体默认是宋体,编程字体用非等宽,写出来那个代码看着非常膈应!(当然可以调整,但非要让每一个人一上来都调整一遍?这不就做事做不到位,招人恶心嘛)。第一次印象就很差,任你网上再吹什么宇宙第一 IDE ,内心还是抗拒。
    2 、dotnet7 出来的时候,试了一下,Mac 电脑上命令行 init 一个项目,要好几秒。我心想,就建几个空目录,要好几秒?印象又一次很差!直接从 init 到放弃!任你网上吹什么不考虑工作生存压力,心中理想代码什么写 C#, 什么 dotnet 别提多爽云云。。。我内心还是抗拒,完全不信!
    dabao
    dabao
    Mar 26, 2025
    10
    换一台 linux 编译,排查下
    AlexBob
    AlexBob
    Mar 26, 2025
    11
    买个墙外服务器编译,就是下载网络问题,不用看
    liuidetmks
    liuidetmks
    Mar 26, 2025
    12
    哥们,你到底是干嘛的,高强度刷 V 站发帖,各方面问题都涉及,业务这么广的吗
    kneo
    kneo
    Mar 26, 2025
    13
    跑个 benchmark 吧。有时候是服务器的问题。
    qW7bo2FbzbC0
    qW7bo2FbzbC0
    Mar 26, 2025
    14
    墙内下载依赖包的确是会有网络问题
    chunqiu233
    chunqiu233
    Mar 26, 2025
    15
    @liuidetmks 哈哈
    nmap
    nmap
    Mar 26, 2025
    16
    现在.net 还能开发 linux 的应用了?
    w568w
    w568w
    Mar 26, 2025
    17
    @nmap 14 年就支持了吧,.NET 早就改名 .NET Core 了
    a33291
    a33291
    Mar 26, 2025
    18
    @nmap 现在是真正意义的跨平台和架构(包括龙芯之类) 😁
    asuraa
    asuraa
    Mar 26, 2025
    19
    是不是加 arm 了 如果你加 arm 和 arm64 之类的确实是这样的,我用 github action 编译 x86 非常快,但是一旦启用 arm64 就慢成屎, 甚至会超时
    minibear2021
    minibear2021
    Mar 26, 2025❤️1
    20
    @w568w .net core 已经入土,现在就叫.net
    w568w
    w568w
    Mar 26, 2025
    21
    @jstony 微软改名部
    cenbiq
    cenbiq
    Mar 26, 2025
    22
    @nmap .net fx (~2016 ) > .net core ( 2016~2020 ) > .net ( 2020~)
    drymonfidelia
    drymonfidelia
    OP
    Mar 26, 2025
    23
    @netnr 你看我的 log ,restore 和 build 是完全分开的,restore 最多 50 秒 我用的是 aws ,应该不存在网络不稳定
    liuliuliuliu
    liuliuliuliu
    Mar 26, 2025
    24
    @nmap 2025 年了还能有人问出这个问题……
    netnr
    netnr
    Mar 26, 2025
    25
    build 会内部调用 restore ,你可以创建一个空项目,无任何依赖打包,对比一下
    drymonfidelia
    drymonfidelia
    OP
    Mar 27, 2025
    26
    @billbob
    @qW7bo2FbzbC0 我帖子正文第一句就是用的是 aws 啊,美国的服务器
    @netnr 无依赖空项目确实编译很快,但这不能排除依赖的问题,因为代码也没了
    mayli
    mayli
    Mar 27, 2025
    27
    编译半小时肯定不正常,才 15k 代码,盲猜网络问题,可能是 dns?
    编译的时候看下 ps, top 和 log, 应该比较容易看出是哪里卡住
    nivalxer
    nivalxer
    Apr 11, 2025
    28
    nuget 的网络问题,在 build 阶段还是会走一次还原包。可以尝试加上 nuget 缓存看看:
    restore 、build 阶段都可以加
    例如:
    RUN --mount=type=cache,id=nuget,target=/root/.nuget/packages dotnet publish "xxxxx.csproj" -c Release -o /app/publish
    nivalxer
    nivalxer
    Apr 11, 2025
    29
    补充一下:如果是想最终打包为镜像发布,可以直接用 publish
    hez2010
    hez2010
    Apr 12, 2025
    30
    @drymonfidelia 不应该,按理来说应该是会出现性能数据总结的
    换成 /clp:PerformanceSummary /tl:false 试试呢?
    niubiman
    niubiman
    Apr 17, 2025
    31
    @tusj 这两个问题完全不是什么问题
    niubiman
    niubiman
    Apr 17, 2025
    32
    @nmap 互联网这么发达了, 为什么信息差还是这么严重, 令人匪夷所思
    tusj
    tusj
    Apr 18, 2025
    33
    @niubiman 我举例微软 IDE 和 dotnet7 的例子是想说,微软总是在匪夷所思的地方,搞出莫明其妙的问题!令人失望。
    这种例子多得很:windows terminal 上 git version 卡死。装了微软电脑管家之后,打开 git bash 有时要 10 秒以上,匪夷所思!
    什么信息差,这几个问题你倒是解释解释?
    niubiman
    niubiman
    Apr 18, 2025
    34
    @tusj #33 我回的是 "现在.net 还能开发 linux 的应用了?" 这句话
    ximi522
    ximi522
    Oct 9, 2025
    35
    感觉可能是你的 nuget 包下载到了 linux 的 temp 目录里,然后被定期删掉了,就需要重新下载,windows 不会有这种问题。可以看看这个思路。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1514 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 88ms · UTC 16:29 · PVG 00:29 · LAX 08:29 · JFK 11:29
    ♥ Do have faith in what you're doing.