非同步程式 – ASP.NET MVC 流量計算練習

      在〈非同步程式 – ASP.NET MVC 流量計算練習〉中留言功能已關閉
  • 建立一個MVC專案 計算流量功能
  • 使用 Jmeter 測試
  • 修改使用 Locker

建立一個 MVC 專案

新增資料表 : 一個紀錄拜訪總計、另一個是瀏覽人次與時間

資料表 :

Controller 裡面程式碼填入 :

        public ActionResult Index()
        {
            MyCounterEntities db = new MyCounterEntities();

            var count = db.BrowserRecords.First();

            count.BrowserCount = count.BrowserCount + 1;
            var nowDate = DateTime.Now;
            var nowCount = count.BrowserCount;
            db.BrowserUserRecords.Add(new BrowserUserRecord
            {
                DateNow = nowDate,
                Num = nowCount
            });

            db.SaveChanges();

            return View();
        }

執行 Jmeter

建立執行緒群組

設定執行緒數量為 200

執行緒群組按右鍵 > 新增 > 取樣 > HTTP 要求

根據 Visual Studio 上專案的 URL 屬性 設定 Http 請求

然後執行 :

可以在檢視結果集可以知道執行結果 :

回到資料庫,查看資料庫情況:

由於同時間存取,有許多筆重複,甚至有 18 之後又變回 17 的情況

雖然有 200 次存取,但只計算到 18

 

增加 locker

        private static object locker = new object();
        public ActionResult Index()
        {
            lock (locker)
            {
                MyCounterEntities db = new MyCounterEntities();

                var count = db.BrowserRecords.First();

                count.BrowserCount = count.BrowserCount + 1;
                var nowDate = DateTime.Now;
                var nowCount = count.BrowserCount;
                db.BrowserUserRecords.Add(new BrowserUserRecord
                {
                    DateNow = nowDate,
                    Num = nowCount
                });

                db.SaveChanges();

                return View();
            }
        }

使用 lock 之後,已可以順利計算

 

https://stackoverflow.com/questions/13901048/how-to-lock-an-asp-net-mvc-action

https://ithelp.ithome.com.tw/articles/10186852

print