加载mySQL数据到内存_【测试验证】数据库加载到内存占用大小

介绍

数据库大小加载到内存占用是不是数据库的本身大小哪?今天忽然突发奇想于是就测试一下。首先我要说明的是我是在EF框架下进行测试的,不知道会不会与ado.net连接方式差生不同的结果,我仅仅是做记录,若有不足还请海涵。

说明

大家都知道获取占用大小字节我们都用sizeof方法。但是此方法仅仅适用于值类型。而不能适用于引用类型。引用类型我们使用Marshal.SizeOf方法,但是也仅仅是非托管的引用,托管对象没有办法获取,所有我就用了垃圾回收来做了测试,可能测试也是存在误差的。

若想了解sizeof相关信息请参阅:https://www.cnblogs.com/supperwu/archive/2013/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是运行起来的内存值,所有尽量避免误差就减去了这一部分数值后才得到下面结果中的内存占用大小。

数据库大小查看对比位置:

a08f9693f5c9642269fef8c61a350e3c.png

c8bb12c62bb9d900067ccb9bfa32e102.png

最后在上一下几个测试数据:

数据量

数据库储存大小

内存占用大小

比例

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值