You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

System.Text.Json v6.0.8序列化耗时与程序集名称相关的异常问题

System.Text.Json 6.0.8序列化耗时与程序集名称关联的异常问题

在使用6.0.8版本的System.Text.Json进行序列化时,遇到异常问题:序列化耗时与程序集名称直接相关。我编写了一个仅包含以下代码的.NET Framework 4.8控制台应用:

var timer = Stopwatch.StartNew();
var result = JsonSerializer.Serialize("Hello, World!");
timer.Stop();

Console.WriteLine(result);
Console.WriteLine(timer.Elapsed.ToString());

奇怪的是,序列化字符串的耗时取决于程序集名称。某个特定程序集名称似乎被“污染”了——使用该名称时,序列化一个字符串竟耗时约4秒;但仅修改程序集名称(无需重新编译,直接重命名二进制文件),耗时就降至200-300毫秒。

已尝试的操作

  • 迁移至其他机器:将带有问题名称的程序集移至其他机器或Windows沙箱中运行,速度正常,无问题。
  • 重启机器:无效果。
  • 使用Newtonsoft:切换为Newtonsoft.Json未出现此问题,仅System.Text.Json存在该异常。
  • 循环序列化:仅首次调用耗时极长,即使每次迭代修改输入也是如此。
  • .NET Core 6.0环境:在该环境下无此现象。
  • 升级至7.0.3版本:升级System.Text.Json到7.0.3版本后,无法复现该问题。

解决方案建议

由于该问题仅在本地机器出现且重启后仍存在,推测是本地针对该程序集名称的某个缓存已损坏。可尝试以下方案:

  1. 清理.NET Framework Native Image缓存:以管理员权限打开命令提示符,执行以下命令卸载并重新生成目标程序集的本机映像:
    ngen uninstall "你的程序集完整路径\问题程序集.exe"
    ngen install "你的程序集完整路径\问题程序集.exe"
    
  2. 删除相关临时缓存文件:手动清理以下路径下的相关缓存文件:
    • C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files(删除与目标程序集相关的文件夹)
    • C:\Users\<你的用户名>\AppData\Local\Temp中包含System.Text.Json或目标程序集名称的临时文件
  3. 重置.NET构建缓存:如果是从项目编译运行,执行dotnet clean命令清理项目的构建缓存,重新编译后运行。
  4. 更换程序集名称重新编译:若以上操作无效,直接更换新的程序集名称重新编译项目,避开已损坏的缓存项。

内容的提问来源于stack exchange,提问作者Morten Lemvigh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 18:53:11