ASP.NET Core 在路由器等 CPU 极差 内存极小的嵌入式设备上性能(并发)表现怎么样?

2022-04-03 00:33:26 +08:00
 rv54ntjwfm3ug8
4621 次点击
所在节点    程序员
38 条回复
devtiange
2022-04-03 08:03:57 +08:00
根本跑不起来吧
bthulu
2022-04-03 08:15:28 +08:00
参考 java, 本质上就是一优化过的 java
shiganwuguo
2022-04-03 09:03:31 +08:00
Asp.net 不支持 aot 也不能裁剪 hello world 就得几百兆。
你这个需求用 go 或者 php 就好了
jeffw
2022-04-03 09:27:11 +08:00
@shiganwuguo 我测试了一下,生成 hello world 程序,才 171KB ,并没有几百兆,vs2022+.NET6 ,默认生成的,未做任何优化裁剪。
![avatar]( https://s3.bmp.ovh/imgs/2022/04/03/66bdb0291accb25b.png)
userforg2021
2022-04-03 09:31:58 +08:00
@jeffw 他算上了 runtime ,不过几百兆夸张了,完整的 runtime 不到 100M
antipro
2022-04-03 09:32:10 +08:00
@jeffw 你没把依赖库算进去
jeffw
2022-04-03 09:47:30 +08:00
@antipro
确实没有算依赖库,我查找了下微软官方的文档,asp.net core 的发布是有裁剪功能的
[关于裁剪文档]( https://docs.microsoft.com/en-us/dotnet/core/deploying/trimming/trim-self-contained)
我重新测试了下,采用独立发布,把 dotnet 运行时也算上,文件大小是 39.7M ,确实大不了少,不过这是在带了个运行时的情况下,感觉还可以接受。
![avatar]( https://s3.bmp.ovh/imgs/2022/04/03/a79df56b341bb301.png)
yousabuk
2022-04-03 09:49:55 +08:00
性能和占用内存怎么样?
masterclock
2022-04-03 10:05:07 +08:00
39.7M 的文件可以接受的情况下,这嵌入式设备不差啊

很多路由器 单核 500M ,16M flash ,128M ram
ragnaroks
2022-04-03 10:35:02 +08:00
asp.net 我没试过,但 dotnet 本身是没问题的,有个项目 https://github.com/NiclasOlofsson/MiNET 为 dotnet 重新实现的 minecraft bedrock 服务端,编译产物 https://ci.appveyor.com/project/NiclasOlofsson/MiNET/branch/master/artifacts 解压得到 MiNET.dll 是可以在 openwrt 上(极路由 4 增强版)跑起来的,占用大概 18M 内存上下,不过我只测试了一个人的情况,而且当玩了一段时间之后,内存占用激增到 50M ,感觉还是别难为路由器了
seakingii
2022-04-03 11:42:27 +08:00
内存极小的设备不要用带有 GC 的语言,特别是.NET 和 JAVA

有几个问题可以说明下:

1 独立打包出来 100K 是不可能的,那种情况应该是只编译了程序,没有带上运行时
2 现在.net 可以"自包容"打包,就是把运行时打包上去.我自己的项目因为相对大一点,未裁剪打包出来有 100M
3 现在.net 可以"自包容"打包成 linux 的"单文件程序",看起来像是 go 打包出来的程序一样,只是会大很多.
4 .net 打包时可以加参数进行"裁剪","裁剪"后文件会相对更小.但是目前这个技术不是很成熟,有些引用分析不到,造成不正确的"裁剪",导致可能上线运行会出错.
5 V2EX 前两天有个 GRPC 的性能测试报告,可以看出: .NET 写的程序性能接近甚至可能超过 RUST,但是占用的内存和 RUST 相对多一个数量级 179.23 MiB VS 18.35 MiB

如果路由器的存储空间足够,程序逻辑不大,或许可以勉强用.NET 写的程序,但真的比较勉强.这个问题不是"性能怎么样",而是"能不能跑"...
opengps
2022-04-03 12:02:49 +08:00
很大程度上取决于优化,我的经历:
开发了一个逻辑,刚开始时候不在乎资源利用量,提前占用资源,比如一次性取出来几万条数据,内存一下子用了上 G 规模。
后来改成每次取一条处理,用了非常低端的机器,最高内存占用才几十兆。
虽然修改后程序变慢了,操作也啰嗦了,但是显然可以运行在更低的设备上了。
yaott2020
2022-04-03 12:09:02 +08:00
建议 go 或者 c

路由器小内存性能又不高就别折腾了
NXzCH8fP20468ML5
2022-04-03 12:13:35 +08:00
不要想,aspnet core 光几个控制器启动起来就 30M ,JIT 热起来后 100M+,复杂点项目小内存根本顶不住。
当然,肯定比 Spring 启动就要 800M 要强很多的。
嵌入式设备首选 C++/Rust ,宽容点就选 Go 。
比如 Adguard Home 在我路由器( 512M )里最多也就 100M ,日志调小还能更小。
12101111
2022-04-03 14:02:21 +08:00
能用 c/c++/rust ,就不要用 go/.net ,路由器的 nor flash 那么小,放这种东西根本放不下
pengtdyd
2022-04-03 14:18:33 +08:00
并发怎么样我不知道,因为在这类设备里 C 才是王者,并且是唯一的王者
MonoLogueChi
2022-04-03 14:38:27 +08:00
.net core 性能上不差,对 cpu 要求不高,但是主要问题是对闪存和内存空间需求比较大,如果有 1G 以上的内存,500M 以上的闪存空间,是可以跑起来的,只要能跑起来,性能就不差,能接近 C++的效率。
具体需要多大的闪存空间,要看程序本身,因为 .net core 独立打包是可以裁剪的,依赖的库越多,打包出来的程序越大。
Ackvincent
2022-04-03 14:40:11 +08:00
C 更适用
duke807
2022-04-03 15:08:31 +08:00
busybox httpd 搭配 shell script 做 cgi
INCerry
2022-04-03 15:11:22 +08:00
@shiganwuguo ASP.NET Core 支持 AOT 也支持剪裁,没有你说的那么夸张,要好几包 mb

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/844665

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX