網站同樣是1000次訪問程序測試,但是分100個線程、每個線程100次循環來測試程序的大並發壓力會更靠譜


            for (int i = 0; i < 1000; i++)
            {
                GetUserRoleNames(i.ToString());
            }

      若這樣單進程測試,一般不大容易發現問題,雖然這也是1000次訪問,但是這個是1個接着一個的訪問,並不能實際反映 多個用戶同時調用某個函數的大並發發生的情況;所以我們需要寫個多線程的程序來模擬,多用戶同時訪問某個方法的並發效率性能會更貼切!

      下面是並發狀態下的運行效果的參考代碼。

        /// <summary>
        /// 獲取用戶的角色名稱
        /// </summary>
        /// <param name="userId">用戶主鍵</param>
        /// <returns>角色名稱列表</returns>
        protected string GetUserRoleNames(string userId)
        {
            string roleName = string.Empty;
            UserService userService = new UserService();
            var entityList = userService.GetUserRoleList(BaseSystemInfo.UserInfo, userId);
            var list = entityList.Where(entity => entity.Enabled == 1 && entity.IsVisible == 1).OrderBy(entity => entity.SortCode);
            foreach (var role in list)
            {
                roleName += "(" + role.RealName + ") ";
            }
            System.Console.Write("i:" + userId.ToString() + ", ");
            return roleName;
        }

        private void GetUserRoleName()
        {
            for (int i = 0; i < 100; i++)
            {
                GetUserRoleNames(i.ToString());
            }
        }

        private void btnCreateUser_Click(object sender, EventArgs e)
        {
            // 控制按鈕狀態
            this.btnCreateUser.Enabled = false;

            for (int i = 0; i < 50; i++)
            {
                // 並發啟動多線程
                Thread thread = new Thread(new ThreadStart(GetUserRoleName));
                thread.Start();
            }

            this.btnCreateUser.Enabled = true;
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM