我有一个使用 .NET Core 3.1 的 protobuf-net.gRPC 运行的 gRPC 服务器。它在后台使用 ASP.NET Core 框架和 Kestrel 来运行 HTTP 服务器。我注意到与在同一端点上的后续调用相比,第一次在此服务器上命中的 gRPC 端点在 ASP NET Core 中间件中花费的时间要多得多。
Time taken from
Microsoft.AspNetCore.Routing.EndpointMiddleware[ExecutedEndPoint] : Executing endpoint 'gRPC - /grpc.....'
Until hitting the actual endpoint function in my gRPC server
第一次花费的时间相当长,大约 30-40 Ma,而随后对同一端点的调用大约是 1-2 ms。
这是因为 JIT 编译器是从 IL->Native 代码编译的吗?如果是这样,除了强制调用端点等显而易见的方法之外,还有其他方法可以解决这个首次性能问题吗?
问候