天天看點

【測試驗證】資料庫加載到記憶體占用大小

介紹

    資料庫大小加載到記憶體占用是不是資料庫的本身大小哪?今天忽然突發奇想于是就測試一下。首先我要說明的是我是在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
25萬 37.7M 144.7M 3.8
30萬 43.5M 171.6M 3.9

作者:

YanBigFeg

——

顔秉鋒

出處:

http://www.cnblogs.com/yanbigfeg

本文版權歸作者和部落格園共有,歡迎轉載,轉載請标明出處。如果您覺得本篇博文對您有所收獲,覺得小弟還算用心,請點選右下角的 [推薦],謝謝!