【测试验证】数据库加载到内存占用大小
2018-05-22 17:02
344 查看
介绍
数据库大小加载到内存占用是不是数据库的本身大小哪?今天忽然突发奇想于是就测试一下。首先我要说明的是我是在EF框架下进行测试的,不知道会不会与ado.net连接方式差生不同的结果,我仅仅是做记录,若有不足还请海涵。说明
大家都知道获取占用大小字节我们都用sizeof方法。但是此方法仅仅适用于值类型。而不能适用于引用类型。引用类型我们使用Marshal.SizeOf方法,但是也仅仅是非托管的引用,托管对象没有办法获取,所有我就用了垃圾回收来做了测试,可能测试也是存在误差的。若想了解sizeof相关信息请参阅:https://www.cnblogs.com/supperwu/archive/2013/05/16/3082061.html 他已经说的很明白我就不多哔哔了。
代码内容:
别的不多少了,也不是啥技术示例,上代码就完事了。以下是我使用的测试代码:Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); GC.Collect(); GC.WaitForFullGCComplete(); long start = GC.GetTotalMemory(true); EFHelp<TimeRecord> eFHelp = new EFHelp<TimeRecord>(); var data = eFHelp.Entities.ToList(); GC.Collect(); GC.WaitForFullGCComplete(); long end = GC.GetTotalMemory(true); long size = end - start; Console.WriteLine("所占内存大小:" + size); //SelectData(); //AddData(); //AddRang(); Console.WriteLine("最终运行时间" + stopWatch.ElapsedMilliseconds + " ms.");
我的思路是首先使用垃圾回收回收一遍然后回去开始字节值,然后从数据库读取数据加载到内存,加载完成之后再次使用回收获取结束值。取两次的差,但是我在这了做了一个减法没有体现,就是我在得到的这个值后减去了11M因为我通过诊断工具大致可以得到有11M是运行起来的内存值,所有尽量避免误差就减去了这一部分数值后才得到下面结果中的内存占用大小。
数据库大小查看对比位置:
最后在上一下几个测试数据:
数据量 | 数据库储存大小 | 内存占用大小 | 比例 |
5万 | 4.6M | 20M | 4.3 |
10万 | 13.6M | 49M | 3.6 |
15万 | 22.8M | 75.9M | 3.3 |
20万 | 29.9M | 108M | 3.6 |
25万 | 37.7M | 144.7M | 3.8 |
30万 | 43.5M | 171.6M | 3.9 |
相关文章推荐
- Android中一张图片加载后所占用内存大小的获取与测试
- android 图片占用内存大小及加载解析
- android 图片占用内存大小及加载解析
- Android图片占用内存大小及加载解析
- ios plist文件和加载到内存时占用空间大小
- as3 测试各个显示对象占用内存的大小
- java Object类占用内存大小计算
- Bitmap那些事之内存占用计算和加载注意事项
- 亲自验证php session和array的容量大小是跟php配置的内存大小来控制的
- C/C++中不同数据类型所占用的内存大小
- 一类数据多种存储(虑将频繁查询的数据加载到内存或者内存数据库。如果一类数据,即要在内存中存储一份,又要在数据库中存储一)
- C++(虚)继承类的内存占用大小
- Android应用性能测试之cpu和内存占用
- 内存及cpu占用测试方法小结
- 计算占用内存大小的方法
- 计算一个接口的返回值大小(占用内存)
- Android如何高效的加载图片(4)--- 图片占用内存的管理
- php 查看数组占用的内存大小
- struct和union在内存中占用空间大小的计算
- MySQL查看数据库、表的占用空间大小以及某个库中所有表的引擎类型