使用IronPython检测ASP.NET程序状况(下)

在上一篇文章中,我们在一个请求中执行了IronPython代码,通过这个方法我们可以轻松地的检查系 统运行的状态,或对系统进行一些简单修改。但是这种做法只能检查系统在当前时刻的状态,在很多情况 下,我们需要对系统的请求进行一段时间的采样。对于简单的数据(例如每秒执行的请求数量,请求时间 ),我们可以通过查看Performance Monitor中相关的计数器来获得一些概要的数据。但是,如果我们需 要获取一些系统的详细状态,甚至是需要根据需要进行动态改变的自定义需求,则势必要深入到系统内部 进行数据采集。因此,我们可能需要让代码执行“一段时间”,并将直接结果进行汇总输出。

让代码执行一段时间不难,简单地使用Thread.Sleep便可,也不会造成什么性能或吞吐量上的损失。 关键就在于,在代码停留的这“一段时间”内,我们使用什么样的做法来采集数据。这时候,老赵脑海中 立即浮现出的便是HttpModule般监听请求管道(Pipeline)中的各式事件。于是立马写出以下的代码(在 前文的示例基础上进行修改):

protected void btnExecute_Click(object sender, EventArgs e)
{
   ScriptEngine engine = Python.CreateEngine();
  var scope = engine.CreateScope ();
  var script = engine.CreateScriptSourceFromString(
     this.txtCode.Text, SourceCodeKind.Statements);
  script.Execute(scope);

   TextWriter writer = new StringWriter();
  scope.SetVariable("logger",  writer);

  Action<HttpContext> traceRequest;
  if  (scope.TryGetVariable<Action<HttpContext>>("traceRequest", out traceRequest))
  {
    Action endTraceRequests;
     scope.TryGetVariable<Action>("endTraceRequests", out endTraceRequests);

     int waitTime;
    if (!scope.TryGetVariable<int>("waitTime", out  waitTime))
    {
      waitTime = 10000;
    }

     this.TraceRequests(traceRequest, waitTime, endTraceRequests);
  }

   this.txtOutput.Text = writer.ToString();
}

private void TraceRequests (Action<HttpContext> traceRequest, int waitTime, Action endTraceRequests)
{
  EventHandler handler = (sender, e) =>
  {
    try
     {
      traceRequest((sender as HttpApplication).Context);
    }
     catch { }
  };

  this.Context.ApplicationInstance.BeginRequest +=  handler;
  Thread.Sleep(waitTime);
  this.Context.ApplicationInstance.BeginRequest  -= handler;

  if (endTraceRequests != null) endTraceRequests();
}

时间: 2024-12-23 21:38:27

使用IronPython检测ASP.NET程序状况(下)的相关文章

使用IronPython检测ASP.NET程序状况(上)

在ASP.NET应用程序运行过程中,很可能会遇到各种意料之外的问题.如果在开发环境下,我们可以设 置断点,对程序状态一探究竟.但是很显然,在产品环境中我们几乎无法使用这样的状态.也正因为如此 ,Dump一个内存快照并进行分析才成为一种"高级技术",同时在线调试也成为一种需要结合技术能力. 分析能力,甚至抗压能力的工作.对于调试和解决问题的探索永远不会停止,各成熟的技术团队几乎都会 有一个丰富工具箱,用于应付生产环境中的各种状况. 在维护一些生产环境中的ASP.NET应用程序时,老赵也经

win7下安装IIS7.0 和VS2010 ASP.NET程序网站的问题

默认情况下,windows7安装时是不会自动安装iis,只能手动安装. 1.安装IIS 开始-控制面板-程序-打开或关闭windows功能 2.如图选择安装 VS2005 中,如果要调试站点的话,必须有"Windows身份验证" "摘要式身份验证" 是使用 Windows 域控制器对请求访问 Web 2.双击内页中的 3.配置默认网站 4.填写 物理路径.应用程序池,点OK即可: IIS 的应用程序池根据托管管道模式分了两种类型:集成和经典 集成 .NET 模式下,

ASP.net 2.0下应用程序离线信息

asp.net|程序 ASP.net 2.0 有一个新特性,就是支持应用程序离线信息. 什么是离线信息呢?以前我们在更新应用程序,导至asp.net应用程序重启,应用程序的用户通常会显示不友好的错误信息,或者IE一直显示加载状态. ASP.net 2.0支持您在应用程序根目录下放置一个app_offline.htm文件,用户请求时,系统会检查是否有这个文件存在,如果有,系统会将app_offline.htm文件的内容直接返回给用户. app_offline.htm的内容可以更改成任何您需要的内容

asp.net程序aspnet_client目录下的js失效

问题描述 asp.net程序aspnet_client目录下的js失效2007-11-0523:21系统同时安装.net1.1 和.net2.0时,.net1.1程序的aspnet_client下的WebUIValidation.js和SmartNav.js文件就会失效,验证通过却无法提交.通过比较,有几个地方不同原.net1.1下的WebUIValidation.jsfunctionValidatorCommonOnSubmit(){varresult=!Page_BlockSubmit;Pa

请大家集体帮我把,这涉及到我的前程 :我今天下午2点要去面试Asp.Net程序员,他可能问到:我给你个网站你会怎么去做(要求独立去做,业务也是自己和客户谈),请有经验的朋友帮我分析下,谢谢,另外他不一定也会问这个问题,你们觉得还有哪些问题需要注意的阿!!谢

问题描述 请大家集体帮我把,这涉及到我的前程:我今天下午2点要去面试Asp.Net程序员,他可能问到:我给你个网站你会怎么去做(要求独立去做,业务也是自己和客户谈),请有经验的朋友帮我分析下,谢谢,另外他不一定也会问这个问题,你们觉得还有哪些问题需要注意的阿!!谢了.分数不多了,就这点了,我会平均分配的..谢谢大家了.. 解决方案 解决方案二:你为什么觉得他会这么问?解决方案三:我想的阿,一般去了面试的问题就一个笔试,做完后就问我法帖的问题了,你说对吧.解决方案四:楼主应聘的是什么职位呀,怎么还

如何在64系统上监视32位模式下ASP.NET程序的性能

如何在64系统上监视32位模式下ASP.NET程序的性能?为何64位系统上的性能计数器会监视不了IIS32位模式下ASP.NET的性能呢? 发生此问题是因为 64 位版本的 Corperfmonext.dll 文件只能枚举 64 位进程. 此外, 32 - 位版本的 Corperfmonext.dll 文件只能枚举 32 位进程. 要在 64 位计算机上查看托管 32 位程序, 请依次单击 开始 . 运行 , 输入%SystemRoot%SysWOW64perfmon.exe然后单击 确定 .即

实现ASP.NET程序性能目标的几种方法

asp.net|程序|性能 第一次在这里写BLOG,希望不要被大家取笑!   一. 调整程序代码   1.避免多次读取相同数据   在循环语句中不要包含无端重复执行的代码,如:   while ( dr.read())   {   if(dr.item["lastname"]==Request.params["lastname"])   return true;   else   return false;   }   在上面循环中,对于DataReader返回的每

如何写出优秀的ASP应用程序

程序 怎样创建鲁棒性.正确性.可维护性和性能俱佳的ASP应用程序?要做什么?不做什么?本文以提纲的形式,给出了主要的Check-Points(检查点). 什么是ASP Active Server Page,简称ASP,是: l连接网友界面(HTML)和商业逻辑(Business Logic): l提供一致的.容易使用的.有状态保持的.基于WEB的客户端: l为那些需要事务处理的WEB 应用提供应用程序环境. ASP不是: l 实现商业逻辑(Business Logic)的地方:商业逻辑应该通过C

ASP.NET程序中常用编程代码

ASP.NET程序中常用编程代码 1.为按钮添加确认对话框 Button1.Attributes.Add("onclick","return confirm('确认?')");button.attributes.add("onclick","if(confirm('are you sure...?')){return true;}else{return false;}") 2.删除表格选定记录 //获得DataGrid主键in