title author date CreateTime categories
C# 程序内的类数量对程序启动的影响
lindexi
2018-10-31 14:7:6 +0800
2018-10-12 9:5:40 +0800
C# 性能测试

最近我在项目写了几万行代码,小伙伴担心会让程序启动速度变慢,所以本渣就来做测试。
本渣使用了代码创建器,创建了 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

从上面数据可以看到,几乎没有任何影响

2018-10-31-C#-程序内的类数量对程序启动的影响的更多相关文章

  1. C# 程序内的类数量对程序启动的影响

    原文:C# 程序内的类数量对程序启动的影响 版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问.如果当前博客图片看不到,请到 http://lindexi.gitee.i ...

  2. 背水一战 Windows 10 (31) - 控件(按钮类): ButtonBase, Button, HyperlinkButton, RepeatButton, ToggleButton, AppBarButton, AppBarToggleButton

    [源码下载] 背水一战 Windows 10 (31) - 控件(按钮类): ButtonBase, Button, HyperlinkButton, RepeatButton, ToggleButt ...

  3. 小程序内嵌H5——判断小程序环境的坑

    现在各种小程序风靡,这边H5的需求还没有搞定,产品又要求做小程序版本,做可以,关键是618前上线,我-- whatever,618要做推广,日期订了,剩下的就只能是排期,定方案,尽可能完成. 最后和产 ...

  4. [文章汇总]ASP.NET Core框架揭秘[最近更新:2018/10/31]

    之前一段时间都在个人公众号账号“大内老A”发布关于ASP.NET Core的系列文章,很多人留言希望能够同步到这里,所以在这里 对这些文章做一个汇总,以便于PC端阅读.如果说微软官方文档主要关于ASP ...

  5. 2018.10.31 bzoj3339&&3585mex(主席树)

    传送门 双倍经验 直接上主席树,每个叶节点维护这个值出现的最右区间,非叶子节点维护当前值域内所有最右区间的最小值. 查询的时候只用在以root[qr]root[qr]root[qr]为根的树上面二分. ...

  6. 2018.10.31 NOIP模拟 一些情报(倍增)

    传送门 题目并不难(想) 其实就是用倍增维护几个树上信息. 也就这么几个: 子树内最长链及其后继点. 子树内次长链及其后继点. 子树内第三场链(也就是dzyodzyodzyo口中鬼畜的次次长链) 点i ...

  7. 2018.10.31 NOIP模拟 几串字符(数位dp+组合数学)

    传送门 如果观察到性质其实也不是很难想. 然而考试的时候慌得一批只有心思写暴力233. 下面是几个很有用的性质: c0,1+1≥c1,0≥c0,1c_{0,1 }+1 ≥ c_{1,0} ≥ c_{0 ...

  8. it's time to change myself now (2018.10.31)

    自16年从新屋熊职校毕业,入职深圳某厂从事云存储两年半了.两年半的时间很快,快的感觉一生都会飞快,两年多一直很忙,忙的几乎忘了自己是否正向改变过. 正向改变,or 积极改变,今年十一回家,与几个好友小 ...

  9. Unity进阶----AssetBundle_02(加载依赖关系及网络资源)(2018/10/31)

    网络资源加载: string path ="file://"+ Application.streamingAssetsPath + "\\windows\\123&quo ...

随机推荐

  1. java获取服务器路径

    java获取服务器一些信息的方法(服务器地址/相对路径/端口/项目名字 request.getServletContext().getRealPath("/")  获取项目所在服务 ...

  2. 2019牛客国庆集训派对day5

    2019牛客国庆集训派对day5 I.Strange Prime 题意 \(P=1e10+19\),求\(\sum x[i] mod P = 0\)的方案数,其中\(0 \leq x[i] < ...

  3. Walk Through Squares HDU - 4758 AC自动机+简单状压DP

    题意:给你两个串,求用m个R,n个D能组成多少个包含这两个串 题解:先构造一个AC自动机记录每个状态包含两个串的状态, 状态很容易定义 dp[i][j][k][status]表示在AC自动机K这个节点 ...

  4. 重温robotframework--day1

    RF支持中文编码设置 1.python2.6  [PythonDir]\Lib\site-packages\robot\utils下的encoding.py文件中,在文件上点击右键,选择Edit wi ...

  5. error in ./src/pages/login.vue?vue&type=style&index=0&lang=less&

    vue-cli3创建less工程,npm run serve 无法运行 bug解决方法: rm -rf node-modules 修改package.json为 "less": & ...

  6. thinkphp Mongo模型

    Mongo模型是专门为Mongo数据库驱动而支持的Model扩展,如果需要操作Mongo数据库的话,自定义的模型类必须继承Think\Model\MongoModel. Mongo模型为操作Mongo ...

  7. VUE下echarts宽度响应式

    window.addEventListener("resize", () => { myChart2.resize();});

  8. zuul隔离机制

    文章转载自:https://blog.csdn.net/farsight1/article/details/80078099 ZuulException REJECTED_SEMAPHORE_EXEC ...

  9. day 42 03--CSS布局设置

      03--CSS布局设置   本节目录 一 盒模型 二 padding(内边距) 三 boder(边框) 四 简单认识一下margin(外边距) 五 标准文档流 六 块级元素和行内元素 七 浮动 八 ...

  10. WinForm中Dispose()和Close()的区别

    WinForm中Dispose()和Close()的区别 Close()会自动调用Dispose()方法,但是如果窗体是模态的,则不会调用 所以ShowDialog的时候,要用Dispose(),Sh ...