public JobResult Process(int threads, TimeSpan duration, string url, CancellationToken cancellationToken) { ThreadPool.SetMinThreads(int.MaxValue, int.MaxValue); var results = new ConcurrentQueue <List <UrlResult> >(); var events = new List <ManualResetEvent>(); var sw = new Stopwatch(); sw.Start(); var totalRuntime = 0.0; for (var i = 0; i < threads; i++) { var resetEvent = new ManualResetEvent(false); ThreadPool.QueueUserWorkItem(async(state) => { var result = new List <UrlResult>(); var sw2 = new Stopwatch(); while (!cancellationToken.IsCancellationRequested && duration.TotalMilliseconds > sw.ElapsedMilliseconds) { sw2.Restart(); try { var request = WebRequest.CreateHttp(url); request.Headers[HttpRequestHeader.AcceptEncoding] = "gzip,deflate,sdch"; using (var response = await request.GetResponseAsync().ConfigureAwait(false)) using (var stream = response.GetResponseStream()) using (var ms = new MemoryStream()) { await stream.CopyToAsync(ms).ConfigureAwait(false); sw2.Stop(); var tmp = new UrlResult(sw.Elapsed.TotalMilliseconds, (double)sw2.ElapsedTicks / Stopwatch.Frequency * 1000, ms.Length); result.Add(tmp); } } catch (Exception) { result.Add(new UrlResult(sw.Elapsed.TotalMilliseconds)); } } results.Enqueue(result); resetEvent.Set(); totalRuntime = sw.Elapsed.TotalMilliseconds; }, i); events.Add(resetEvent); } for (var i = 0; i < events.Count; i += 50) { var group = events.Skip(i).Take(50).ToArray(); WaitHandle.WaitAll(group); } var finalResults = results.SelectMany(r => r, (a, b) => b).ToList(); return(new JobResult(threads, totalRuntime, finalResults)); }
public static UrlResult GetURL(string typeName) { UrlResult oResult = new UrlResult(); switch (typeName) { case "Symptom": oResult.Show = StaticURLHelper.SymptomShow; oResult.List = StaticURLHelper.SymptomList; oResult.Filter1 = StaticURLHelper.SymptomShowByPlace; oResult.Filter2 = StaticURLHelper.SymptomShowByDepartment; break; case "Disease": oResult.Show = StaticURLHelper.DiseaseShow; oResult.List = StaticURLHelper.DiseaseList; oResult.Filter1 = StaticURLHelper.DiseaseShowByPlace; oResult.Filter2 = StaticURLHelper.DiseaseShowByDepartment; break; case "Check": oResult.Show = StaticURLHelper.CheckShow; oResult.List = StaticURLHelper.CheckList; oResult.Filter1 = StaticURLHelper.CheckShowByPlace; oResult.Filter2 = StaticURLHelper.CheckShowByDepartment; oResult.Filter3 = StaticURLHelper.CheckShowClassify; break; case "Operation": oResult.Show = StaticURLHelper.OperationShow; oResult.List = StaticURLHelper.OperationList; oResult.Filter1 = StaticURLHelper.OperationShowByPlace; oResult.Filter2 = StaticURLHelper.OperationShowByDepartment; break; case "Drug": oResult.Show = StaticURLHelper.DrugShow; oResult.List = StaticURLHelper.DrugShowBySearch; oResult.Filter1 = StaticURLHelper.DrugShowClassify; break; case "DrugNumber": oResult.Show = StaticURLHelper.DrugShow; oResult.List = StaticURLHelper.DrugShowByNumber; oResult.Filter1 = StaticURLHelper.DrugShowClassify; break; case "DrugCode": oResult.Show = StaticURLHelper.DrugShow; oResult.List = StaticURLHelper.DrugShowByCode; oResult.Filter1 = StaticURLHelper.DrugShowClassify; break; case "Info": oResult.Show = StaticURLHelper.InfoShow; break; case "Lore": oResult.Show = StaticURLHelper.LoreShow; break; default: break; } return(oResult); }