C# 程序内的类数量对程序启动的影响
版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问。如果当前博客图片看不到,请到 http://lindexi.gitee.io 访问博客。本文地址 https://blog.csdn.net/lindexi_gd/article/details/83583199
最近我在项目写了几万行代码,小伙伴担心会让程序启动速度变慢,所以本渣就来做测试。
本渣使用了代码创建器,创建了 1000 个垃圾文件,这些文件都很简单。我将这些文件放在一个控制台项目里,没有做任何的引用,然后使用 dotTrace 测试控制台启动的时间
我同时还写了一个空白的控制台项目,连输出都没有,请看代码
using System;
using System.Diagnostics;
namespace KejerbopaNekereyeresereJemayRouxouqou
{
class Program
{
static void Main(string[] args)
{
}
}
}
这应该就是最快的控制台的代码了,这时使用 dotTrace 附加调试这个项目

附加调试可以看到运行的时间都不是自己写的代码的时间,总时间是 138ms 实际运行的时间会比这个少。每个人的设备测试的时间都会不相同,而且每个时间运行的值都不太一样

我接着运行了2次,收集到的空控制台窗口的运行时间
空控制台窗口运行时间
第一次:138ms
第二次:110ms
第三次:116ms
写一个空白的类是很简单的,我使用了下面的代码创建随机的类的名
class WhairchooHerdo
{
public string LemgeDowbovou()
{
var zarwallsayKeesar = (char) _ran.Next('A', 'Z' + 1);
var lardurDairlel = new StringBuilder();
lardurDairlel.Append(zarwallsayKeesar);
for (int i = 0; i < 5; i++)
{
lardurDairlel.Append((char)_ran.Next('a', 'z'));
}
return lardurDairlel.ToString();
}
private Random _ran = new Random();
}
然后使用下面代码创建随机的类
{% raw %}
private static void RelawcereMirouxayTibe()
{
var terebawbemTitirear = new WhairchooHerdo();
for (int i = 0; i < 1000; i++)
{
var pereviCirsir = terebawbemTitirear.LemgeDowbovou();
var nemhaSibemnoosa = $@"
using System;
using System.Collections.Generic;
using System.Text;
namespace LecuryouWuruhempa
{{
class {pereviCirsir}
{{
public string Foo {{ get; set; }}
}}
}}";
var jisqeCorenerairTurpalhee = new DirectoryInfo("林德熙临时文件");
jisqeCorenerairTurpalhee.Create();
File.WriteAllText(Path.Combine(jisqeCorenerairTurpalhee.FullName, pereviCirsir + ".cs"), nemhaSibemnoosa);
}
}
{% endraw %}
这样就可以创建 1000 个类,创建一个空白的控制台项目,引用这些类
然后运行一个有1000个类的空白控制台项目,第一次运行的时间居然是 67ms 十分少

我同样运行3次,收集到下面信息
1000个类的空控制台窗口运行时间
第一次:67ms
第二次:102ms
第三次:117ms
所以如果一个类不被引用,即使一个工程里有很多的类,对软件的启动影响几乎没有影响
接着还是和之前一样,不过修改为空控制台项目引用 dll 这个 dll 里面有 1000 个类
空白的项目是 KejerbopaNekereyeresereJemayRouxouqou.exe 引用的 dll 是 MeeLearlerepeda.exe 可以看到有 1000 个类还是比较大

同样测试三次
引用1000个类的dll 空控制台窗口运行时间
第一次:113ms
第二次:103ms
第三次:117ms
从上面数据可以看到,几乎没有任何影响
我搭建了自己的博客 https://lindexi.gitee.io/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新
如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。
C# 程序内的类数量对程序启动的影响的更多相关文章
- 2018-10-31-C#-程序内的类数量对程序启动的影响
title author date CreateTime categories C# 程序内的类数量对程序启动的影响 lindexi 2018-10-31 14:7:6 +0800 2018-10-1 ...
- 小程序内嵌H5——判断小程序环境的坑
现在各种小程序风靡,这边H5的需求还没有搞定,产品又要求做小程序版本,做可以,关键是618前上线,我-- whatever,618要做推广,日期订了,剩下的就只能是排期,定方案,尽可能完成. 最后和产 ...
- 2019-8-31-C#-程序集数量对软件启动性能的影响
title author date CreateTime categories C# 程序集数量对软件启动性能的影响 lindexi 2019-08-31 16:55:58 +0800 2018-10 ...
- C# 程序集数量对软件启动性能的影响
本文通过很多的数据测试分析在一个项目引用很多个外部项目和将外部项目的类合并到一个项目之间的启动性能的不同. 通过分析知道了如果一个项目引用了很多项目,而且在启动过程会全部调用这些项目,这时的软件性能会 ...
- 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取”产品付费数量等于0的问题”】
转的别人的 看到很多童鞋问到,为什么每次都返回数量等于0?? 其实有童鞋已经找到原因了,原因是你在 ItunesConnect 里的 “Contracts, Tax, and Banking”没有完成 ...
- Python的程序结构[2] -> 类/Class[3] -> 内建类与内建函数
内建类与内建函数的区分 / Distinction of Built-in Type and Function 对于 Python,有许多可以不需要定义或引用就可以使用的函数(类)(参考内建模块),诸 ...
- Python的程序结构[2] -> 类/Class[4] -> 内建类 super
内建类 super / Built-in Type super 关于内建类 对于 super 可以从官方文档中看到基本介绍,super 接收一个类,以及类或类的实例,最终返回一个代理对象的实例.而 M ...
- Python的程序结构[2] -> 类/Class[5] -> 内建类 bytes 和 bytearray
内建类 bytes 和 bytearray / Built-in Type bytes and bytearray 关于内建类 Python的内建类 bytes 主要有以下几点: class byte ...
- Python的程序结构[2] -> 类/Class[6] -> 内建类 map
内建类map / Built-in Type map 关于内建类 map 是一个内建的类,能够返回一个 map 的 obj.map 的第一个参数为一个可执行函数,后续参数均为可迭代对象,map 会分别 ...
随机推荐
- Linux下设置MySQL不区分大写和小写
MySQL在Linux下数据库名.表名.列名.别名大写和小写规则: 1.数据库名与表名是严格区分大写和小写 2.表的别名是严格区分大写和小写 3.列名与列的别名在全部的情况下均是 ...
- MVC中url路由规则
Routing:首先获取视图页面传过来的请求,并接受url路径中的controller和action以及参数数据,根据规则将识别出来的数据传递给某controller中的某个action方法 MapR ...
- Source Insight 3.50.0065使用详解
转自calvinlee1984 Subject:Source Insight3.50.0065使用详解 Date: 21-Oct-2011 By: Calvinlee1984@ ...
- log4j 2.x 版本的 properties 配置
#用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出status = debugdest = errname = PropertiesConf ...
- 1、Java快速入门
第一课 Java基础1. ubuntu上环境搭建 (建议使用我们提供的VMWare映象文件) 如果要自己安装ubuntu, 请参考<韦东山Android系统视频使用手册.pdf> ubun ...
- mysql快速入门 分类: B6_MYSQL 2015-04-28 14:31 284人阅读 评论(0) 收藏
debian方式: apt-get install mysql-server-5.5 mysql -u root -p redhat安装方式 一.下载并解压 $ wget http://cdn ...
- 如何设计一个基于mysql的消息系统
https://segmentfault.com/a/1190000012255186
- sqlplus中怎么将你全部的操作和结果记录保存到你指定的文件里
[在sqlplus的操作中,非常多时候我们都想把自己的写的sql语句和改动日志或者结果信息做记录] [首先]肯定要正常连接到oralce数据库. [然后] 你用你指定的用户登录到oralce数据库之后 ...
- Gora快速入门 分类: C_OHTERS 2015-01-30 09:55 465人阅读 评论(0) 收藏
概述 Gora是apache的一个开源项目. The Apache Gora open source framework provides an in-memory data model and pe ...
- mycat 离散分片 -> 程序指定分区的分片
1.程序指定分区的分片 此规则是在运行阶段有应用自主决定路由到那个分片. 此方法为直接依据字符子串(必须是数字)计算分区号(由应用传递參数.显式指定分区号). 2,加入配置文件 在function.x ...