项目从.NET5.0 升级到 8.0,加起来 1.5 万行代码, Linux 下编译经常要半个小时,有的时候又几秒钟就能编译完, Windows 下一直非常正常,怎么排查? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
drymonfidelia
V2EX    .NET

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

  •  1
     
  •   drymonfidelia 198 天前 4502 次点击
    这是一个创建于 198 天前的主题,其中的信息可能已经有所发展或是发生改变。
    服务器是 aws m8g.2xlarge 8 核 32GB 内存
    整个服务器上就一个 Docker ,里面运行这个服务
    以前 .NET 5 的都是秒编译
    现在经常要半个小时,有时甚至五六个小时编译不完
    有时候又能 2 秒编译,不知道为什么
    `docker system prune -a` 运行了好几遍,没效果



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

    改善网络
    外面发布文件,再基于发布文件+runtime 打包,避免编译
    beginor
        8
    beginor  
       197 天前 via Android
    加上加个 no restore ,不联网检查 nuget 包, 看看是不是网络问题
    tusj
        9
    tusj  
       197 天前
    说两个微软给我的印象:
    1 、大学时第一次接触 Visual Studio ,进去之后字体默认是宋体,编程字体用非等宽,写出来那个代码看着非常膈应!(当然可以调整,但非要让每一个人一上来都调整一遍?这不就做事做不到位,招人恶心嘛)。第一次印象就很差,任你网上再吹什么宇宙第一 IDE ,内心还是抗拒。
    2 、dotnet7 出来的时候,试了一下,Mac 电脑上命令行 init 一个项目,要好几秒。我心想,就建几个空目录,要好几秒?印象又一次很差!直接从 init 到放弃!任你网上吹什么不考虑工作生存压力,心中理想代码什么写 C#, 什么 dotnet 别提多爽云云。。。我内心还是抗拒,完全不信!
    dabao
        10
    dabao  
       197 天前
    换一台 linux 编译,排查下
    AlexBob
        11
    AlexBob  
       197 天前
    买个墙服务器编译,就是下载网络问题,不用看
    liuidetmks
        12
    liuidetmks  
       197 天前
    哥们,你到底是干嘛的,高强度刷 V 站发帖,各方面问题都涉及,业务这么广的吗
    kneo
        13
    kneo  
       197 天前
    跑个 benchmark 吧。有时候是服务器的问题。
    qW7bo2FbzbC0
        14
    qW7bo2FbzbC0  
       197 天前
    墙内下载依赖包的确是会有网络问题
    chunqiu233
        15
    chunqiu233  
       197 天前
    @liuidetmks 哈哈
    nmap
        16
    nmap  
       197 天前
    现在.net 还能开发 linux 的应用了?
    w568w
        17
    w568w  
       197 天前
    @nmap 14 年就支持了吧,.NET 早就改名 .NET Core 了
    a33291
        18
    a33291  
       197 天前
    @nmap 现在是真正意义的跨平台和架构(包括龙芯之类)
    asuraa
        19
    asuraa  
       197 天前
    是不是加 arm 了 如果你加 arm 和 arm64 之类的确实是这样的,我用 github action 编译 x86 非常快,但是一旦启用 arm64 就慢成屎, 甚至会超时
    jstony
        20
    jstony  
       197 天前   1
    @w568w .net core 已经入土,现在就叫.net
    w568w
        21
    w568w  
       197 天前
    @jstony 微软改名部
    cenbiq
        22
    cenbiq  
       197 天前
    @nmap .net fx (~2016 ) > .net core ( 2016~2020 ) > .net ( 2020~)
    drymonfidelia
        23
    drymonfidelia  
    OP
       197 天前
    @netnr 你看我的 log ,restore 和 build 是完全分开的,restore 最多 50 秒 我用的是 aws ,应该不存在网络不稳定
    liuliuliuliu
        24
    liuliuliuliu  
    PRO
       197 天前
    @nmap 2025 年了还能有人问出这个问题……
    netnr
        25
    netnr  
       197 天前
    build 会内部调用 restore ,你可以创建一个空项目,无任何依赖打包,对比一下
    drymonfidelia
        26
    drymonfidelia  
    OP
       196 天前
    @billbob
    @qW7bo2FbzbC0 我帖子正文第一句就是用的是 aws 啊,美国的服务器
    @netnr 无依赖空项目确实编译很快,但这不能排除依赖的问题,因为代码也没了
    /td>
    mayli
        27
    mayli  
       196 天前
    编译半小时肯定不正常,才 15k 代码,盲猜网络问题,可能是 dns?
    编译的时候看下 ps, top 和 log, 应该比较容易看出是哪里卡住
    nivalxer
        28
    nivalxer  
       181 天前
    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
        29
    nivalxer  
       181 天前
    补充一下:如果是想最终打包为镜像发布,可以直接用 publish
    hez2010
        30
    hez2010  
       180 天前
    @drymonfidelia 不应该,按理来说应该是会出现性能数据总结的
    换成 /clp:PerformanceSummary /tl:false 试试呢?
    niubiman
        31
    niubiman  
       175 天前
    @tusj 这两个问题完全不是什么问题
    niubiman
        32
    niubiman  
       175 天前
    @nmap 互联网这么发达了, 为什么信息差还是这么严重, 令人匪夷所思
    tusj
        33
    tusj  
       174 天前
    @niubiman 我举例微软 IDE 和 dotnet7 的例子是想说,微软总是在匪夷所思的地方,搞出莫明其妙的问题!令人失望。
    这种例子多得很:windows terminal 上 git version 卡死。装了微软电脑管家之后,打开 git bash 有时要 10 秒以上,匪夷所思!
    什么信息差,这几个问题你倒是解释解释?
    niubiman
        34
    niubiman  
       174 天前
    @tusj #33 我回的是 "现在.net 还能开发 linux 的应用了?" 这句话
    ximi522
        35
    ximi522  
       4 小时 17 分钟前
    感觉可能是你的 nuget 包下载到了 linux 的 temp 目录里,然后被定期删掉了,就需要重新下载,windows 不会有这种问题。可以看看这个思路。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1062 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 17:47 PVG 01:47 LAX 10:47 JFK 13:47
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86