首页 新闻 会员 周边 捐助

.NET 6 正式版的奇怪问题:一用C#模式匹配,build时就挂

0
悬赏园豆:200 [待解决问题]

上次遇到过一次,使用模式匹配(Pattern Matching)的 C# 代码如下

public string GetImageUrl(AdUnitName adUnit)
{
    return adUnit switch
    {
        AdUnitName.B1 => DateTime.Now.Day switch
        {
            (>= 21) and (<= 23) => "https://img2020.cnblogs.com/blog/35695/202111/35695-20211121194147694-1950960922.jpg",
            (>= 24) and (<= 25) => "https://img2020.cnblogs.com/blog/35695/202111/35695-20211121194244248-1723248558.jpg",
            26 => "https://img2020.cnblogs.com/blog/35695/202111/35695-20211121194328418-1500726946.jpg",
            _ => string.Empty
        },
        _ => string.Empty
    };
}

当时在 windows 上用 Visual Studio 进行 build,VS 停止响应,MSBuild.exe 进程发生内存泄露,消耗了几个G内存。在 linux 上用 .net sdk 进行 build,linux 服务器因内存耗尽而宕机。

今天又遇到了这个问题,今天的模式匹配代码比较简单

if (now >= new DateTime(2021, 11, 27, 21, 0, 0) && now < new DateTime(2021, 12, 3))
{
    return adUnit switch
    {
        AdUnitName.B0 => new(
            impressionUrl: "x",
            clickthroughUrl: "y"),
        _ => null,
    };
}

在 windows 上用 Visual Studio 进行 build,一直处于 build 状态,状态栏一直显示 Ready,取消 build 也没有反应,只有强制结束所有 MSBuild.exe 进程才能恢复。在 linux 上 build 也是内存耗尽而宕机。

请问如何解决?

问题补充:

windows 上编译时 msubild 进程截图

dudu的主页 dudu | 高人七级 | 园豆:30948
提问于:2021-11-27 18:03
< >
分享
所有回答(1)
0

表示vs2022和msbuild 17.0.0+c9eb9dd64 没这个问题. 话说22已经是64位了, 为啥你的msbuild显示是32的呢... 试试看是不是这个问题.

czd890 | 园豆:14488 (专家六级) | 2021-11-29 09:17

因为Visual Studio 2022 的奇怪问题,现在主要用 VS2029

支持(0) 反对(0) dudu | 园豆:30948 (高人七级) | 2021-11-29 09:51

在 linux 上用 .net sdk 6 编译会直接让 linux 服务器宕机

支持(0) 反对(0) dudu | 园豆:30948 (高人七级) | 2021-11-29 09:52

@dudu: Net 6 在 aws linux, centos7,8, win10上表示没问题. 用的是GetImageUrl这部分测试代码. 版本都是msbuild 17.0.0+c9eb9dd64

实在不行到https://developercommunity.visualstudio.com/search?space=8找找看别人有没有问题, 或者提交一个feedback.

支持(0) 反对(0) czd890 | 园豆:14488 (专家六级) | 2021-11-29 10:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册