实体的代理程序集
程序启动消耗
由于实体代理类型和实体加载器类型都不需要事先编写,通常会在程序启动时自动产生,因此会占用程序的启动时间,
例如下面的服务启动耗时统计:
这个时间并不固定,和机器的性能,繁忙程度、以及实体类型的数量有关。
如果你希望消除这个时间消耗,方法是使用 ClownFish.CodeGen 这个命令行工具来提前完成程序启动的那部分工作,它会生成一个程序集,包含所有实体的代理类和加载器类。 有了这个程序集之后,程序启动时就会跳过这个过程。
ClownFish.CodeGen
ClownFish.CodeGen是一个命令行工具,目前的功能只有一个:
- 为数据实体类型生成代理类和加载器类,并编译生成程序集。
命令行用法:
dotnet.exe ClownFish.CodeGen.dll d:\xxx\bin\net7.0 xxx.EntityProxy.dll
建议在 docker build 前运行此工具,例如下面的脚本片段:
pushd ext/Nebula.Moon/bin
# 运行命令行工具,生成代理类和加载器类
docker run --rm -v $PWD:/xbin -w /xbin yyw-registry-vpc.cn-hangzhou.cr.aliyuncs.com/nebula/sdk:7.0 dotnet /clownfish/ClownFish.CodeGen.dll /xbin/publish
# 为应用程序构建镜像,然后推送到镜像仓库
cp ../Dockerfile .
docker build -t nebula_moon .
docker tag moon yyw-registry-vpc.cn-hangzhou.cr.aliyuncs.com/nebula/moon:$version
docker push yyw-registry-vpc.cn-hangzhou.cr.aliyuncs.com/nebula/moon:$version
popd
说明:上面示例中,我先做了一个用于编译的docker镜像,里面就包含 ClownFish.CodeGen
优化后的启动时间消耗
还是用上面那个服务为例,新的时间消耗如下图:
在诊断页 /nebula/debug/sysinfo.aspx 的下面,我们可以看到:
表示在程序启动时,没有编译生成任何类型,但加载了一个代理程序集。
cfd_default_EntityProxy.dll 是一个默认的名称,因为我在前面脚本中没有指定新的程序集名称。