应用程序大小是否会影响启动速度和内存大小



测试程序是一个"HelloWorld"类。
情况1:程序是单独编译的。最终 dll 编译大小为 ~几个字节。
情况 2:有 HelloWorld main() 未引用的类。最终 dll 编译大小为 50 MB。

问题:两个项目在运行时是否具有相同的 :
1) 内存占用?(C# 在启动之前是否必须在内存中加载整个 DLL?
2)启动时间(程序从磁盘加载到内存的时间)?
3)编译速度相同?

在你说这是过早的优化之前。知道没有 ide 可以优化死代码/无法访问的代码。所以我想知道我是否应该将其包含在"发布"中。

好吧,我决定从评论中出来写一个答案,

  1. C#中的LoadLibrary与C#中的C/C++不同,所有dll的元数据在启动时加载以进行类型解析等。但是,在运行时访问之前,不会对整个类型进行抖动。(如果你想了解更多并深入研究这些问题,你可以使用OlyDBG和WinDBG并查看内存占用和加载时间)

  2. 在 C# 中,方法在首次访问时编译(当然有 RuntimeHelpers.PrepareMethod 函数用于请求方法的 JIT,但开发人员可能会这样做很少见)。因此,如果您有一个应用程序需要在启动时初始化大量服务,那么启动当然会比启动时具有相同大小但 JIT 要求较少的应用程序更耗时。(https://blogs.msdn.microsoft.com/clrcodegeneration/2007/09/15/to-ngen-or-not-to-ngen/这是另一篇我觉得有用的文章。这是关于Anroid JIT,但我认为它揭示了一丝光芒:https://infinum.co/the-capsized-eight/art-vs-dalvik-introducing-the-new-android-runtime-in-kit-kat)

  3. 编译速度是输入项目、优化水平等的一些因素。在 C# 中,编译器编译每个代码,因为我们在这里有反射,我们可以访问程序集中的所有代码。(http://www.c-sharpcorner.com/UploadFile/a8024d/C-Sharp-program-compliation-steps/)

最新更新