Assembly.GetExecutingAssembly()性能

时间:2012-06-14 10:29:51

标签: asp.net performance c#-4.0

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

[assembly: AssemblyVersion("1.21.0.13329")]
[assembly: AssemblyFileVersion("1.21.0.13329")]

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

我在考虑使用

Version version = Assembly.GetExecutingAssembly().GetName().Version;

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

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

1 个答案:

答案 0 :(得分:10)

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

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

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

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

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

    public static Version ApplicationVersion
    {
        get { return _applicationVersion; }
    }
}

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

var version = AppVersion.ApplicationVersion