摘要: Moles是由微软研究院(Microsoft Research)开发的.NET依赖分离框架,它实现了使用自定义的委托(delegate)方法来替换原有类中的方法,以达到分离依赖,方便单元测试的目的。Moles在功能和用法上与开源的IoC框架Moq很像,但Moles有一些Moq实现不了功能,如替换静态方法,去掉静态构造函数,突破访问限制等。Molas非常有利于对ASP.NET WebForm构建的网站和依赖第三方类库的程序进行单元测试。下载和安装下载Moles后直接安装就可以了,里面集成有VS2010的插件,安装成功后,VS2010右键菜单中会集成Moles功能菜单。使用示例我们试下测试2000 阅读全文
posted @ 2012-02-15 01:30 vento 阅读(489) 评论(0) 推荐(0) 编辑
摘要: 前一篇文章介绍了WinDbg入门,本篇主要介绍WinDbg常用命令和用法。 调试程序的CPU满载问题,关键是要知道程序当前正在进行什么操作。假如我们在cpu满载时创建了一个dump文件,使用下面几个命令可以查看当前程序正在进行什么处理:.time运行.time命令会显示时间相关的信息,如系统运行时间,进程运行时间和CPU花费在内核态和用户态的时间。0:000> .timeDebug session time: Tue Oct 23 08:38:35.000 2007 (GMT+1)System Uptime: 4 days 17:48:01.906Process Uptime: 0 da 阅读全文
posted @ 2012-02-02 11:34 vento 阅读(919) 评论(0) 推荐(0) 编辑
摘要: 原文:http://blogs.msdn.com/b/kaevans/archive/2011/04/11/intro-to-windbg-for-net-developers.aspx 翻译:cxfksword当你的代码发布为产品后,无论是在其他人的电脑中运行,还是部署到服务器中,你通常不再能访问到它的程序文件,也不能观察到代码的当前运行情况和运行环境。当你的代码在新的环境运行时,有很多因素会影响到程序的运行情况,如服务器系统打了更新补丁,网络策略改变,防火墙规则限制,磁盘权限配置等等。当代码运行不正常时,你可能只能靠代码中各处输出的日志来判断运行情况。但只靠输出日志,你有时还是不能判断故障 阅读全文
posted @ 2012-02-01 16:29 vento 阅读(928) 评论(2) 推荐(0) 编辑
摘要: HAProxy是linux平台上的负载均衡软件,有完善的服务器健康检测和会话(session)保持功能,性能高,支持tcp和http网络连接分发。 问题起因 入公司一年,我发现在ASP.NET网站上部署更新时,经常会遇到下面这样的烦恼: 假如更新到bin文件夹下的dll文件,会引起iis的应用程序池重启,从而导致更新这段时间内,用户访问网站会非常缓慢,甚至出现页面超时。 部署更新时要小心翼翼,祈祷上帝没少拷了什么文件,假如更新后网站出错,就只能心跳加速地快速还原系统 编辑经常提一些需求只是简单更改下页面文字,而为了不使这种简单的更改引起应用程序池重启,一般部署网站时都是采用copy方式发布,而网站也工作在debug模式下,而不是更优化速度更快的release模式 上面几种情况都很影响用户体验,也让每次更新时肾上激素上升。 要解决上面的烦恼,需要满足下面几个条件: 有至少两个以上的相同功能站点,当一个站点下线维护时,后续的请求能自动交给另一个站点处理 有站点健康检测功能,可以一个个轮流地下线站点和上线站点,这过程中对用户的访问完全不受影响 应用HAProx 阅读全文
posted @ 2012-01-21 16:05 vento 阅读(1546) 评论(0) 推荐(0) 编辑
摘要: 1、安装JAVA SDK到官网(http://www.oracle.com/technetwork/java/javase/downloads/index.html)下载最新的javase sdk,推荐安装1.6版。安装完成后,在windows环境变量中添加[JAVA_HOME],并把路径指向java sdk的安装根目录。 2、安装Scala从scala官网(http://www.scala-lang.org/downloads)下载windows版的压缩包,推荐2.8.1 final版,直接解压到相应目录中,假设为c:\\scala-2.8.1.final\,再添加下面两个环境变量:新增环境 阅读全文
posted @ 2012-01-21 15:06 vento 阅读(454) 评论(0) 推荐(0) 编辑
摘要: 有时,我们安装的windows服务可能是个框架,在同一服务器上可能服务于不同的系统,为了使服务名称不冲突,需要把服务名称更改为可配置。 因为ServiceInstaller能直接设置安装服务的名称和描述,所以很容易就能写出下面的代码:serviceInstaller.ServiceName = ConfigurationManager.AppSetting["ServiceName"];serviceInstaller.Description = ConfigurationManager.AppSetting["ServiceDescription"]; 阅读全文
posted @ 2012-01-12 15:42 vento 阅读(464) 评论(0) 推荐(0) 编辑
摘要: 现在系统中常用的获取客户端真实ip的代码如下: // 获取IP地址protected string GetIPAddress(){ string result = ""; try { //透过代理取客户端ip result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? ""; if (result == "") { //连接主机ip result = HttpContext.Current.Request.Serve 阅读全文
posted @ 2012-01-09 15:40 vento 阅读(317) 评论(0) 推荐(0) 编辑
摘要: 新浪有开放ip查询的接口(http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=123.124.2.85),通过不断查询就能抓取到ip信息。不过要遍历所有的ip地址不现实,数据存储和查询都是问题,一般我们面对的是中国的用户,只需要遍历抓取下中国范围的ip信息就行,而且ip地址最后一位的256个ip一般分配到同一地区,所以最后一位只需遍历.0的ip就可以了。 目前ip4地址已经分配完,中国的ip段可以在以下网址找到 阅读全文
posted @ 2012-01-09 15:23 vento 阅读(508) 评论(0) 推荐(0) 编辑
摘要: 1、为什么需要使用线程池(Thread Pool) 减少线程间上下文切换。线程执行一定的时间片后,系统会自动把cpu切换给另一个线程使用,这时还需要保存当前的线程上下文状态,并加载新线程的上下文状态。当程序中有大量的线程时,每个线程分得的时间片会越来越少,可能会出现线程未处理多少操作,就需要切换到另一线程,这样频繁的线程间上下文切换会花费大量的cpu时间。 减少内存占用。系统每创建一条物理线程,需要大概花费1MB的内存空间,许多程序喜欢先创建多条物理线程,并周期轮询来处理各自的任务,这样既消耗了线程上下文切换的时间,还浪费了内存。这些任务可能只需要一条线程就能满足要求。假如某一任务需要执行较长的周期,线程池还可以自动增加线程,并在空闲时,销毁线程,释放占用的内存。 阅读全文
posted @ 2012-01-09 15:12 vento 阅读(7375) 评论(1) 推荐(0) 编辑
摘要: XWiki是JAVA开发的一个开源Wiki,与有名的Confluence有点相像,现在最新版是3.0,支持修改记录,博客和数据导入导出等,非常适合作为公司的知识库。1、如何安装建议到下载页面(http://www.xwiki.org/xwiki/bin/view/Main/Download)下exe的独立安装包安装,安装后会自动生成Start XWiki Enterprise和StopXWiki Enterprise两个快捷方式,点击Start XWiki Enterprise运行服务后,就可以通过http://localhost:8080/访问了。2、更改访问端口程序安装后,默认是通过808 阅读全文
posted @ 2011-04-27 15:43 vento 阅读(4080) 评论(0) 推荐(0) 编辑