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

时间:2017-06-19 05:14:59

标签: c# performance runtime

测试程序是“HelloWorld”类 案例1:该程序是单独编译的。最终的dll编译大小是几个字节 案例2:HelloWorld main()有未引用的类。最终dll编译大小为50 mb。

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

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

1 个答案:

答案 0 :(得分:1)

好吧,我决定退出评论并写一个答案,

  1. C#中的LoadLibrary与C / C ++不同。在C#中,所有dll的元数据在启动时加载以用于类型解析等。但是在运行时存在访问之前,整个类型都不是Jitted。 (如果您想了解更多并深入研究这些问题,可以使用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/