WEB项目中除了单元测试,还经常需要多线程测试一个方法是否存在并发问题,或者是否有性能问题。每次都要写测试代码总是一件很累的事情。于是写了这一个多线程测试的类库,用来进行快速的多线程并发测试。
多线程并发测试由以下步骤完成:
- 创建并发测试的线程数,先创建的线程等待最后一个线程创建完成。
- 所有线程执行待测试的方法,返回测试的结果。
- 等所有线程执行完成后,进入思考时间等待。
- 继续进行循环测试。
WEB项目中除了单元测试,还经常需要多线程测试一个方法是否存在并发问题,或者是否有性能问题。每次都要写测试代码总是一件很累的事情。于是写了这一个多线程测试的类库,用来进行快速的多线程并发测试。
多线程并发测试由以下步骤完成:
上个月公司项目需要,在腾讯社区开放平台部署了基于mono的腾讯校友应用“公务员考试”。经过一周的观察,发现问题非常大。
2月18日到2月24日的平均值在70.91%。而2月23日-3月1日平均值在76.61%。占用的CPU非常高。在访问用户数不高的情况下,单是MONO的守护进程就占用了75.0%的CPU。
生产环境上是用Apache+mod_mono来做WEB站的,总的来看,对于WEB负载,MONO的情况并不理想。
缓存机制是衡量Web系统是否成熟的重要标志,引入缓存机制可以缩短数据请求的处理时间,提高系统的整体响应能力。Web系统通常有大量经常被访问的对象,为了降低创建和销毁对象的开销,避免频繁和数据库进行交互,将经常被访问的对象保存在内存中,可以大幅度的提高系统的性能。
HttpRuntime.Cache是进程内的缓存实现,它高效,速度极快。但稳定性、安全性差,受应用程序池回收设置影响,数据无法持久化。文件缓存在php系统中非常见,Discuz!NT也有实现文件缓存,将对象序列化到文件中保存,读取速度会比分布式缓存快,但是在序列化和反序列化时性能消耗较大,同时进行缓存的对象必须是可序列化的。Memcached较稳定,受外因素影响较小,安全性高。但是毕竟是分布式缓存,网络开销、序列化和传输过程产生的额外开销比较大,数据也无法持久化。
这些常用的缓存实现方式都有各自的优点和弊端,只使用任何一种都不能很好的满足我们的需要。那假设我们会在项目中一起使用这三种缓存,那应该如何处理?
借助开心网开放API,我们可以非常方便的开发组件或实现连接功能。开心网的开放平台API采用了REST基础的接口规范。所有接口都使用POST方法调用,这里实现了一个C#版本的SDK。
SDK中的KaixinClient一样是单例,通过KaixinClient.Instance来调用相关的接口。
开心网的组件是嵌入在iframe中的,它会通过URL传一个sessionKey的值给你,每次接口的调用都需要使用这个sessionKey,而sessionKey的过期时间是4个小时,所以SDK中重载了所有的接口调用方法,方便大家调用接口。
使用未带sessionKey的方法,方法内部会自动调用HttpContext.Current.Request.QueryString去获取sessionKey,如果获取sessionKey失败,那该次的接口调用也是失败的。
腾讯社区开放平台是基于QQ空间、朋友社区(QQ校友)两大社交网络的开放平台。至今官方提供了一系列的开放接口(Open API)和开发工具包(SDK),开发者可以通过Open API获取登录用户信息、用户签名信息以及好友关系链信息等。已上线的应用还可以调用支付和监控接口,实现支付功能,查看应用实时运维数据。
腾讯官方给出了不少的SDK,点这里进入官方地址。遗憾的是没有开放C#的SDK。
我们DotNet开发者不能落后其它平台的开发者,这里开源我的腾讯社区开放平台SDK,算是第一个C#的SDK吧。