Assembly.GetExecutingAssembly()性能

Lia*_*iam 3 asp.net performance c#-4.0

我正在研究创建一种自动检查系统运行版本的方法.每当我们发布代码来测试时,我们的版本都在使用

[assembly: AssemblyVersion("1.21.0.13329")]
[assembly: AssemblyFileVersion("1.21.0.13329")]
Run Code Online (Sandbox Code Playgroud)

我现在想扩展我们的ASP.Net Web表单Web服务以显示此版本号.因此,Web表单应用程序将把它放在主页上的某个位置,Web服务可能会有一个返回版本号的Web方法.

我在考虑使用

Version version = Assembly.GetExecutingAssembly().GetName().Version;
Run Code Online (Sandbox Code Playgroud)

去做这个.但我担心因为这是使用反射,它可能会增加我的代码的性能开销.它可能被多次调用,特别是在主页上,我不希望这会减慢响应时间.

我有另一个解决方案,所以我不想要替代方案,我只是想知道是否有人知道这个性能开销是否会相对显着?

Rob*_*ine 10

性能开销以及它是否重要的​​问题实际上取决于访问量.在单页命中,可能不是 - 代码执行时间是在几毫秒内测量的.如果服务器负载很多,很可能.

但是你不能只是一次击中(即仍然使用反射,但不是每次):

我假设这不会改变Web应用程序实例的生命周期 - 所以为什么不捕获这些信息并存储它?

也许创建一个类来捕获它,例如:

public class AppVersion
{
    private static readonly Version _applicationVersion = Assembly.GetExecutingAssembly().GetName().Version;

    public static Version ApplicationVersion
    {
        get { return _applicationVersion; }
    }
}
Run Code Online (Sandbox Code Playgroud)

您现在可以通过以下代码访问此代码:

var version = AppVersion.ApplicationVersion
Run Code Online (Sandbox Code Playgroud)