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; }
