简单尝试了一下,发现不是那么回事。
dotnet --version
9.0.102
dotnet new webapi -o Foo
(cd Foo && dotnet publish -c Release -o app)
(cd Foo/app && ./Foo)
ps -p`pgrep Foo` -opid,cmd,vsz,rss,pss
PID CMD VSZ RSS PSS
4474 ./Foo 274224976 194176 169724
用 systemd-run 测试,最低 MemoryMax=160M 可以启动。 这种不带 DB 访问的纯 API ,就算 SpringBoot 也可以 100M 启动,Vertx 可以更低。
以下环境变量也都试过了,没用
启动占用多,ab 稍稍给点压力,也不怎么增长,非常诡异。 做了 native aot 之后,内存倒是很低,但目前有很多不兼容 aot 的组件。
搜了一下,好多案例反馈 dotnet 在 Linux 下内存占用明显比 Windows 大。 我尝试追踪了一下,heap 很小,90%以上都是 unmanaged heap 占的内存。 最常用的 NET Memory Profiler 和 windbg 都是 windows only 。 JVM 相关工具 MAT 和 Arthas 等诊断工具都是跨平台的,dotnet 非 win 生态还是逊色一些。
虽然 C#很优秀,dotnet core 设计的也很好,但我还是选 Kotlin + JVM ,等 dotnet 10 出来再试试。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.