【问题标题】:How expensive is a DLL reference?DLL 引用有多贵?
【发布时间】:2016-02-16 15:55:30
【问题描述】:

本地或全局 (GAC / .NET) DLL 引用,它们有多贵?

当然,我们永远不应该引用我们不使用的东西,但出于好奇,我问:引用整个 .NET 框架会是一个很大的性能问题吗?

一个类似的更实际的问题是:是否值得在项目中组合类似的命名空间以最小化需要引用的 DLL 文件(只要我必须在任何情况下使用这些 DLL 中的每个代码)?

【问题讨论】:

  • 除非您的应用程序对性能高度敏感(即您计算微秒)或您的内存严重受限,否则另一个 DLL 的性能成本将非常小。您最好按逻辑组织您的项目,而不必担心另一个 DLL 的成本。只有当测试表明特定的 DLL 引用正在影响性能时,才考虑解决分析器认为有问题的那些引用。
  • 嗯,您从不引用 GAC 的任何内容。您正在强制编译器读取您添加的每个引用的元数据。文件 I/O 是编译器必须做的更昂贵的事情之一,但在带有 SSD 的现代机器上,往往隐藏得很好。团队成员不屑一顾的表情肯定是更实际的问题。

标签: c# .net vb.net dll dll-reference


【解决方案1】:

仅当您执行一个方法时才会加载引用,该方法使用来自引用的 .dll 中的类型。所以即使你引用整个 .NET 框架,它也不会自动加载。

class Program
{
    static void Main(string[] args)
    {
        AppDomain.CurrentDomain.AssemblyLoad += CurrentDomain_AssemblyLoad;
        Console.WriteLine("=====Working with URI...=====");
        WorkWithUri();

        Console.WriteLine("=====Working with XML...=====");
        WorkWithXml();
    }

    private static void CurrentDomain_AssemblyLoad(object sender, AssemblyLoadEventArgs args)
    {
        Console.WriteLine(args.LoadedAssembly.FullName + " has been loaded.");
    }

    private static void WorkWithUri()
    {
        var uri = new Uri("c:\\");
    }

    private static void WorkWithXml()
    {
        XDocument xml = new XDocument();
    }
}

还有输出:

=====Working with URI...=====
System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 has been loaded.
=====Working with XML...=====
System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 has been loaded.
System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 has been loaded.
System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 has been loaded.
Press any key to continue . . .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 2011-09-23
    相关资源
    最近更新 更多