void BeginRequest(object sender, EventArgs e) { HttpApplication application = sender as HttpApplication; if (application != null && application.Context != null) { var request = application.Context.Request; var response = application.Context.Response; if (request != null && request.Path.Contains("TestRequest")) { if (request["kill"] == "all") { KillAllThread(); } TestRequestResponce(response); response.End(); return; } var thread = System.Threading.Thread.CurrentThread; var process = System.Diagnostics.Process.GetCurrentProcess(); ThreadRequestInfo lastRequest = null; Requests.TryGetValue(thread.ManagedThreadId, out lastRequest); if (lastRequest == null) { lastRequest = new ThreadRequestInfo() { ThreadId = thread.ManagedThreadId, LastUrl = request.RawUrl, Start = DateTime.Now, End = DateTime.Now, LastChange = DateTime.Now, RepeatCount = 0, UsedMSecond = 0, UsedProcessTime = process.UserProcessorTime.TotalMilliseconds, State = "Begin", }; Requests.TryAdd(thread.ManagedThreadId, lastRequest); } else { lastRequest.ThreadId = thread.ManagedThreadId; lastRequest.LastUrl = request.RawUrl; lastRequest.LastUrl = request.RawUrl; lastRequest.Start = DateTime.Now; lastRequest.End = DateTime.Now; lastRequest.LastChange = DateTime.Now; lastRequest.RepeatCount++; lastRequest.UsedMSecond = 0; lastRequest.UsedProcessTime = process.UserProcessorTime.TotalMilliseconds; lastRequest.State = "Begin"; } } }
void EndRequest(object sender, EventArgs e) { HttpApplication application = sender as HttpApplication; if (application != null) { var request = application.Context.Request; var response = application.Context.Response; var process = System.Diagnostics.Process.GetCurrentProcess(); var thread = System.Threading.Thread.CurrentThread; ThreadRequestInfo lastRequest = null; Requests.TryGetValue(thread.ManagedThreadId, out lastRequest); if (lastRequest != null) { lastRequest.ThreadId = thread.ManagedThreadId; lastRequest.End = DateTime.Now; lastRequest.UsedMSecond = (lastRequest.End - lastRequest.Start).TotalMilliseconds; lastRequest.UsedProcessTime = (process.UserProcessorTime.TotalMilliseconds - lastRequest.UsedProcessTime); lastRequest.UsedProcessTime2 = process.Threads.Cast <ProcessThread>().Where(p => p.Id == thread.ManagedThreadId).Select(p => p.PrivilegedProcessorTime.TotalMilliseconds).FirstOrDefault(); lastRequest.State = "End"; Requests.TryRemove(thread.ManagedThreadId, out lastRequest); } } }