实体的代理程序集

程序启动消耗

由于实体代理类型和实体加载器类型都不需要事先编写,通常会在程序启动时自动产生,因此会占用程序的启动时间,

例如下面的服务启动耗时统计:
xx

这个时间并不固定,和机器的性能,繁忙程度、以及实体类型的数量有关。

如果你希望消除这个时间消耗,方法是使用 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



优化后的启动时间消耗

还是用上面那个服务为例,新的时间消耗如下图:
xx



在诊断页 /nebula/debug/sysinfo.aspx 的下面,我们可以看到:
xx

表示在程序启动时,没有编译生成任何类型,但加载了一个代理程序集。
cfd_default_EntityProxy.dll 是一个默认的名称,因为我在前面脚本中没有指定新的程序集名称。