Beispiel #1
0
        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);
        }