【测试记录】EF插入查询性能

简介: 介绍     背景什么就不提了,无外乎出现了大数据需要处理。简单的说就是我测试了EF正常的插入以及一个优化小方式而已,然后做了查询记录。其余没有什么,写这篇只是为了记录结果方便以后数据参考吧。 代码介绍: 首先是插入代码常规: EFHelp eFHelp = new EFHelp();...

介绍

    背景什么就不提了,无外乎出现了大数据需要处理。简单的说就是我测试了EF正常的插入以及一个优化小方式而已,然后做了查询记录。其余没有什么,写这篇只是为了记录结果方便以后数据参考吧。

代码介绍:

首先是插入代码常规:

 EFHelp<TimeRecord> eFHelp = new EFHelp<TimeRecord>();
            for (int i = 0; i < 20000; i++)
            {
                TimeRecord t = new TimeRecord();
                t.id = Guid.NewGuid().ToString("N");
                t.childId = Guid.NewGuid().ToString("N");
                t.state = 0;
                t.stateTime = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd");

                eFHelp.AddNo(t);
            }
            for (int i = 0; i < 30000; i++)
            {
                TimeRecord t = new TimeRecord();
                t.id = Guid.NewGuid().ToString("N");
                t.childId = Guid.NewGuid().ToString("N");
                t.state = 1;
                t.stateTime = DateTime.Now.AddDays(2).ToString("yyyy-MM-dd");

                eFHelp.AddNo(t);
            }
            eFHelp.SaveChange();

然后是优化处理方法:

    public testEntities()
            : base("name=testEntities")
        {
            this.Configuration.AutoDetectChangesEnabled = false;
        }

没有错就是增加一句话,这句话主要是取消EF的状态变化跟踪。想要了解更多的请自行百度这个东西。

推荐这骗写的很好:https://www.cnblogs.com/hehexiaoxia/p/5707180.html

多说一句我们都知道在6.0之后增加AddRang方法,我也大概测试了一些与这个方法差不多,我想也许AddRang方法里面就是封装了这个东西吧。

查询方法:

 //查询
            EFHelp<TimeRecord> eFHelp = new EFHelp<TimeRecord>();
            var dataG = eFHelp.Entities.GroupBy(b => b.childId);
            //var dataG = eFHelp.Entities.Where(b => b.state == 1).GroupBy(b => b.childId).Select(s => se(s.ToList()));
            List<TimeRecord> listResult = new List<TimeRecord>();
            foreach (var item in dataG)
            {
                Func<List<TimeRecord>, TimeRecord> fun = delegate (List<TimeRecord> listData)
                {
                    TimeRecord timeResult = listData.Where(t => Convert.ToDateTime(t.stateTime) <= Convert.ToDateTime("2018-05-23")).OrderByDescending(b => b.stateTime).FirstOrDefault();
                    if (timeResult == null)
                    {
                        return null;
                    }
                    else
                    {
                        if (timeResult.state == 1)
                        {
                            return timeResult;
                        }
                        else
                        {
                            return null;
                        }
                    }
                };
                //TimeRecord time = se(item.ToList());
                TimeRecord time = fun(item.ToList());
                if (time != null)
                {
                    listResult.Add(time);
                }
            }
            listResult = listResult.OrderBy(b => b.id).Skip(0).Take(15).ToList();
            foreach (var item in listResult)
            {
                Console.WriteLine("查询的id:" + item.stateTime + "查询的时间:" + item.stateTime);
            }

因为我做了筛选,做一下实际场景。所有不是只取而是做了条件查询。

结果数据:

插入3万条,

1万2018-05-20 0状态

2万2018-05-21 1状态

测试数据(次)

数据量

时间(毫秒=秒)

插入3万(1)

0

402884=402.88

查询15条数据(1)

3万

2766=2.76

查询15条数据(2)

3万

2976=2.96

查询15条数据(3)

3万

3250=3.25

查询15条数据(4)

3万

3083=3.08

查询15条数据(5)

3万

2966=2.69

查询15条数据(6)

3万

3015=3.01

修改其中一条数据改为2018-05-20后重新查询,为了防止时间都是一样的验证查询的准确性,在查询打印结果中我在第一条数据看到时间修改为2018-02-20的数据说明查询的准确,

然后时间也在上面查询时间范围内,所有时间没有误差

查询15条数据(1)

3万

2971=2.97

查询15条数据(2)

3万

2652=2.65

再次修改其中一条childId设置为重复,验证多次查询问题的准确性

查询15条数据(1)

3万

2819=2.81

查询15条数据(2)

3万

3370=3.37

5万条测试,在3万基础上在录入2万条

1万2018-05-22 0状态

1万2018-05-23 1状态

测试数据(次)

数据量

时间(毫秒=秒)

插入2万(2)

3万

193700=193.7

查询15条数据(1)

5万

3149=3.14

查询15条数据(2)

5万

3526=3.52

查询15条数据(3)

5万

2922-2.92

查询15条数据(4)

5万

3688=3.68

查询15条数据(5)

5万

3339=3.33

查询15条数据(6)

5万

3024=3.02

查询15条数据(7)

5万

2921=2.91

查询15条数据(9)

5万

3156=3.15

查询15条数据(10)

5万

3304=3.3

查询15条数据(11)

5万

3588=3.58

 以上表格数据主要是查询数据。其中第一个是常规的插入数据为了与下面的做对比。

最后使用了无状态(AutoDetectChangesEnabled)添加3万所用时间13689=13秒。5万:21410=21秒,21667,

AddRang批量添加3万:13962=13秒,14034=14秒,5万21366=21秒

最后我用10万数据查询:3448,3482,3379,3288

然后是22万:7093,6074,5405,5976,5421,5442,5967

27万数据:9200,6384,6987,6575,6305,

 

作者:YanBigFeg —— 颜秉锋

出处:http://www.cnblogs.com/yanbigfeg

本文版权归作者和博客园共有,欢迎转载,转载请标明出处。如果您觉得本篇博文对您有所收获,觉得小弟还算用心,请点击右下角的 [推荐],谢谢!

目录
相关文章
|
1月前
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
47 4
|
7天前
|
开发框架 .NET Java
C#集合数据去重的5种方式及其性能对比测试分析
C#集合数据去重的5种方式及其性能对比测试分析
27 11
|
9天前
|
算法 Java 测试技术
使用 BenchmarkDotNet 对 .NET 代码进行性能基准测试
使用 BenchmarkDotNet 对 .NET 代码进行性能基准测试
40 13
|
9天前
|
开发框架 .NET Java
C#集合数据去重的5种方式及其性能对比测试分析
C#集合数据去重的5种方式及其性能对比测试分析
38 10
|
30天前
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
89 13
|
3月前
|
监控 测试技术 PHP
性能和压力测试
【10月更文挑战第10天】性能和压力测试
126 60
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
65 1
|
2月前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
46 4
|
2月前
|
监控 JavaScript 前端开发
如何在实际应用中测试和比较React和Vue的性能?
总之,通过多种方法的综合运用,可以相对客观地比较 React 和 Vue 在实际应用中的性能表现,为项目的选择和优化提供有力的依据。
43 1
|
3月前
|
测试技术 PHP 开发工具
php性能监测模块XHProf安装与测试
【10月更文挑战第13天】php性能监测模块XHProf安装与测试
39 0