介绍
数据库大小加载到内存占用是不是数据库的本身大小哪?今天忽然突发奇想于是就测试一下。首先我要说明的是我是在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 |
作者:YanBigFeg —— 颜秉锋
出处:http://www.cnblogs.com/yanbigfeg
本文版权归作者和博客园共有,欢迎转载,转载请标明出处。如果您觉得本篇博文对您有所收获,觉得小弟还算用心,请点击右下角的 [推荐],谢谢!