性能低主要是由于I/O操作导致的延迟,导致了等待
==>CPU很闲,处理速率却上不去
解决办法:
减少I/O操作:
加入缓存来缓解I/O操作
- AppFabric或Memcached
让出主线程,开启单独线程来处理I/O操作(主线程就能处理更多的IIS请求)
- PageAsyncTask, Parallel
把大面积的数据(比如某字段中保存了1w个字符串,并且select了多行...OMG!),压缩后保存到磁盘,也能减少I/O消耗的时间
- ICSharpCode.SharpZipLib.dll
如果系统是分多个物理计算机通信的,也要压缩message的内容,比如WCF
- 自定义MessageFormatter实现序列化后的压缩和发序列化前的解压缩
可是,问题又来了:
CPU现在很高了,咋办?
那么又要来解决办法了:
使用IIS7的ARR(Application Request Routing)来解决
可扩展是考虑未来一段时间而提出的部分提前设计概念,一般用得多的是在框架平台中,抽象的说法就是:抽象+隔离具体实现+暴露热点
抽象:桥接模式、模版模式
隔离具体实现:定义接口、使用接口、然后啥都不做,就等着别人去实现...
暴露热点:就是钩子,提供默认实现,允许别人自定义
例子(记录日志):
只要写个ILog接口,提供一个方法Write(str),然后就用吧,别管其他的了,管它是写文件?写db?写msmq?写service broker?写window事件?在当前计算机上写?在其他计算机上写?都不管,这里只管调用
具体咋处理完全不管,让应该管的去管吧,够抽象了吧,够隔离了吧,够暴露...
这次确实没啥料,就免点“推荐”了...