介绍
数据库大小加载到内存占用是不是数据库的本身大小哪?今天忽然突发奇想于是就测试一下。首先我要说明的是我是在EF框架下进行测试的,不知道会不会与连接方式差生不同的结果,我仅仅是做记录,若有不足还请海涵。
说明
大家都知道获取占用大小字节我们都用sizeof方法。但是此方法仅仅适用于值类型。而不能适用于引用类型。引用类型我们使用Marshal.SizeOf方法,但是也仅仅是非托管的引用,托管对象没有办法获取,所有我就用了垃圾回收来做了测试,可能测试也是存在误差的。
若想了解sizeof相关信息请参阅:/supperwu/archive//05/16/3082061.html他已经说的很明白我就不多哔哔了。
代码内容:
别的不多少了,也不是啥技术示例,上代码就完事了。以下是我使用的测试代码:
Stopwatch stopWatch = newStopwatch();
stopWatch.Start();
GC.Collect();
GC.WaitForFullGCComplete();long start = GC.GetTotalMemory(true);
EFHelp eFHelp = new EFHelp();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