C# 循环中 直接索引 VS 缓存索引 性能测试

using System;

namespace TestCSharp
{
    class MainClass
    {
        public class t1 {
            public b1 b = new b1();
        }

        public class b1 {
            public t2 t = new t2();
        }

        public class t2 {
            public b2 b = new b2();
        }

        public class b2 {
            public t3 t = new t3();
        }

        public class t3 {
            public b3 b = new b3();
        }

        public class b3 {
            public t4 t = new t4();
        }

        public class t4 {
            public b4 b = new b4();
        }

        public class b4 {
            public t5 t = new t5();
        }

        public class t5 {
            public b5 b = new b5();
        }

        public class b5 {
            public t6 t = new t6();
        }

        public class t6 {
            public b6 b = new b6();
        }

        public class b6 {
            public int x = 0;
        }

        public static int stimes = 100000000;

        public static void Main (string[] args)
        {
            int times = stimes;
            t1 test1 = new t1();
            DateTime s1 = DateTime.Now;
            for (int i = 0; i < times; i++)
            {
                test1.b.t.b.t.b.t.b.t.b.t.b.x ++;
            }
            DateTime e1 = DateTime.Now;
            Console.WriteLine("time1 = " + (e1 - s1).Milliseconds);

            t1 test2 = new t1();
            DateTime s2 = DateTime.Now;
            b6 b2 = test2.b.t.b.t.b.t.b.t.b.t.b;
            for (int i = 0; i < times; i++)
            {
                b2.x ++;
            }
            DateTime e2 = DateTime.Now;
            Console.WriteLine("time2 = " + (e2 - s2).Milliseconds);

            t1 test3 = new t1();
            DateTime s3 = DateTime.Now;
            b6 b3 = test3.b.t.b.t.b.t.b.t.b.t.b;
            for (int i = 0; i < times; i++)
            {
                b3.x = b3.x + 1;
            }
            DateTime e3 = DateTime.Now;
            Console.WriteLine("time3 = " + (e3 - s3).Milliseconds);

            t1 test4 = new t1();
            DateTime s4 = DateTime.Now;
            b6 b4 = test4.b.t.b.t.b.t.b.t.b.t.b;
            for (int i = 0; i < stimes; i++)
            {
                b4.x = b4.x + 1;
            }
            DateTime e4 = DateTime.Now;
            Console.WriteLine("time4 = " + (e4 - s4).Milliseconds);

            t1 test5 = new t1();
            DateTime s5 = DateTime.Now;
            b6 b5 = test5.b.t.b.t.b.t.b.t.b.t.b;
            for (int i = 0; i < 100000000; i++)
            {
                b5.x = b5.x + 1;
            }
            DateTime e5 = DateTime.Now;
            Console.WriteLine("time5 = " + (e5 - s5).Milliseconds);
        }

    }
}

output:

time1 = 456
time2 = 144
time3 = 145
time4 = 145
time5 = 179
请按任意键继续. . .

总结: 缓存一下总是有好处的

原文地址:https://www.cnblogs.com/xixidaguai/p/8321215.html

时间: 2024-11-06 03:35:32

C# 循环中 直接索引 VS 缓存索引 性能测试的相关文章

Lua table直接索引VS缓存索引性能测试小示例

local p = {} p.t = {} p.t.p = {} p.t.p.t = {} p.t.p.t.p = {} p.t.p.t.p.t = {} p.t.p.t.p.t.p = {} p.t.p.t.p.t.p.t = {} p.t.p.t.p.t.p.t.p = {} p.t.p.t.p.t.p.t.p.t = {} p.t.p.t.p.t.p.t.p.t.p = {} p.t.p.t.p.t.p.t.p.t.p.t = {} p.t.p.t.p.t.p.t.p.t.p.t.p =

Handlebars.js循环中索引(@index)使用技巧(访问父级索引)

使用Handlebars.js过程中,难免会使用循环,比如构造数据表格.而使用循环,又经常会用到索引,也就是获取当前循环到第几次了,一般会以这个为序号显示在页面上. Handlebars.js中获取循环索引很简单,只需在循环中使用{{@index}}即可. 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <META http-equiv=Content-Type content="text/html; charset=utf-

Ajax请求php返回json对象数据中包含有数字索引和字符串索引,在for in循环中取出数据的顺序问题

//php中的数组数据格式 Array ( [all] => Array ( [title] => ALL [room_promotion_id] => all ) [best_available_rate] => Array ( [title] => Best Available Rate [room_promotion_id] => best_available_rate ) [30] => Array ( [room_promotion_id] =>

12 在Foreach循环中如何获得当前迭代的索引

static void ForEachIndex() { int curIndex = 0; Dictionary<string, string> diction = new Dictionary<string,string>(); int counter = 0; diction.Add("One", "One"); diction.Add("Two", "Two"); diction.Add(&qu

LDAP索引及缓存优化

一.设置索引 索引将查找信息和 Directory Server 条目关联起来. Directory Server支持以下几种索引: 1出现索引 (pres) - 列出了具有特定属性的条目,与属性的值无关. 2等式索引 (eq) - 使您能够高效地搜索包含特定属性值的条目. 3近似索引 (approx) - 通过使用 ~= 过滤运算符提供了高效的"音似"搜索功能. 例如,近似索引对于搜索部分名称或拼错的名称很有用.Directory Server 使用 变音位语音算法的一个变体来执行近

MySql存储引擎+表解压缩机制+索引+查询缓存机制+慢查询日志

一.大型网站优化之MySql优化 1.优化和不优化的对比的 在业界当中我们有一个叫大数据(big data)的概念,所谓的大数据指代千万级别以上的数据作为起步的数据.所以我们现在需要对两张都具有50331650条记录的表进行查询对比,其中表名为tbl_no的表是没有做过任何优化手段的表,表名为tbl_yes的表是做过优化手段的表.这个实验的目的是观察具有优化手段和不具有优化手段的查询中速度的差别. 实验条件: 1)两张表的数据记录总数是相同的 2)两张表的数据字段结构也是一样的 3)查询的记录的

数据库中的聚集索引、非聚集索引、优化索引

这篇文章我们来讨论一下索引的问题吧,这篇文章不会介绍怎么创建索引,但是会介绍怎么优化索引. 什么是索引? 索引是对记录按照多个字段进行排序的一种方式.对表中的某个字段建立索引会创建另一种数据结构,其中保存着字段的值,每个值又指向与它相关的记录.这种索引的数据结构是经过排序的,因而可以对其执行二分查找. 怎么理解索引呢?我们经常用在windows系统下,查询某些文件,系统都会建议我们建立文件的索引.比如,如果你要查询一个文件名,系统要扫描所有文件进行傻瓜式地扫描,速度当然会很慢.当我们建立了索引后

SQLServer中间接实现函数索引或者Hash索引

本文出处:http://www.cnblogs.com/wy123/p/6617700.html SQLServer中没有函数索引,在某些场景下查询的时候要根据字段的某一部分做查询或者经过某种计算之后做查询,如果使用函数或者其他方式作用在字段上之后,就会限制到索引的使用,不过我们可以间接地实现类似于函数索引的功能.另外一个就是如果查询字段较大或者字段较多的时候,所建立的索引就显得有点笨重,效率也不高,就需要考虑使用一个较小的"替代性"字段做等价替换,类似于Hash索引,本文粗浅地介绍两

sqlserver中的存储过程 函数 事物 索引及视图

                                       存储过程和函数具体的区别: 核心提示:本质上没区别.只是函数有限制只能返回一个标量,而存储过程可以返回多个.并且函数是可以嵌入在SQL中使用的,可以在SELECT等SQL语句中调用,而存储过程不行.执行的本质都一样. 函数限制比较多,如不能用临时表,只能用表变量等,而存储过程的限制相对就比较少. 1. 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强. 2. 对于存储过程来说可以返回参数,而函数只