Ejemplo n.º 1
0
        public async Task <List <DetailResultItemModel> > GetData(string key)
        {
            var resultModel = new DetailResultModel();
            var taskArray   = new Task <DetailResultItemModel>[] {
                Task.Run(() => GetDictionaryData(key)),
                Task.Run(() => GetConcurrentDictionaryData(key)),
            };

            Task.WaitAll(taskArray);

            for (int i = 0; i < taskArray.Length; i++)
            {
                var taskItem = taskArray[i];
                if (taskItem.IsCompleted)
                {
                    resultModel.ResultItemList.Add(taskItem.Result);
                }
            }

            // Result
            return(await Task.Run(() => resultModel.ResultItemList));
        }
Ejemplo n.º 2
0
        public IActionResult Index(int size = 1000)
        {
            var resultModel = new DetailResultModel
            {
                RequestCount = size
            };

            var sw = new Stopwatch();

            sw.Start();

            cDummyObjects = new ConcurrentDictionary <string, MyObject>();

            for (int i = 0; i < resultModel.RequestCount; i++)
            {
                dummyValue = new MyObject
                {
                    Id    = i,
                    Key   = string.Concat("key-", i),
                    Value = string.Concat("value-", i)
                };

                cDummyObjects.TryAdd(dummyValue.Key, dummyValue);
            }

            var cdTryAddTime = sw.Elapsed.TotalMilliseconds;

            resultModel.ResultItemList.Add(new DetailResultItemModel
            {
                Type = "ConcurrentDictionary",
                Step = "TryAddResult",
                Time = cdTryAddTime
            });

            sw.Reset();
            sw.Start();

            dDummyObjects = new Dictionary <string, MyObject>();

            for (int i = 0; i < resultModel.RequestCount; i++)
            {
                dummyValue = new MyObject
                {
                    Id    = i,
                    Key   = string.Concat("key-", i),
                    Value = string.Concat("value-", i)
                };

                dDummyObjects.TryAdd(dummyValue.Key, dummyValue);
            }

            var dTryAddTime = sw.Elapsed.TotalMilliseconds;

            resultModel.ResultItemList.Add(new DetailResultItemModel
            {
                Type = "Dictionary",
                Step = "TryAddResult",
                Time = dTryAddTime
            });

            sw.Reset();
            sw.Start();

            var taskArray = new Task <List <DetailResultItemModel> >[] {
                Task.Run(() => GetData("value-5")),
                Task.Run(() => GetData("value-10")),
                Task.Run(() => GetData("value-25")),
                Task.Run(() => GetData("value-50")),
                Task.Run(() => GetData("value-75")),
                Task.Run(() => GetData("value-100")),
                Task.Run(() => GetData("value-250")),
                Task.Run(() => GetData("value-500")),
                Task.Run(() => GetData("value-750")),
                Task.Run(() => GetData("value-1000"))
            };

            Task.WaitAll(taskArray);

            for (int i = 0; i < taskArray.Length; i++)
            {
                var taskItem = taskArray[i];
                if (taskItem.IsCompleted)
                {
                    for (int j = 0; j < taskItem.Result.Count; j++)
                    {
                        var detailTaskItem = taskItem.Result[j];
                        resultModel.ResultItemList.Add(detailTaskItem);
                    }
                }
            }

            var taskResult = sw.Elapsed.TotalMilliseconds;

            sw.Stop();

            resultModel.ResultItemList.Add(new DetailResultItemModel
            {
                Type = "All",
                Step = "Result",
                Time = taskResult
            });

            resultModel.ResponseTime = taskResult;

            return(View(resultModel));
        }