上次遇到过一次,使用模式匹配(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 也是内存耗尽而宕机。
请问如何解决?
表示vs2022和msbuild 17.0.0+c9eb9dd64 没这个问题. 话说22已经是64位了, 为啥你的msbuild显示是32的呢... 试试看是不是这个问题.
因为Visual Studio 2022 的奇怪问题,现在主要用 VS2029
在 linux 上用 .net sdk 6 编译会直接让 linux 服务器宕机
@dudu: Net 6 在 aws linux, centos7,8, win10上表示没问题. 用的是GetImageUrl这部分测试代码. 版本都是msbuild 17.0.0+c9eb9dd64
实在不行到https://developercommunity.visualstudio.com/search?space=8找找看别人有没有问题, 或者提交一个feedback.