经常借用别人公司的一台托管的服务器上传下载些资料,顺便也帮人盯着服务器的配置与安全,前两天发现,系统盘 10G 硬盘空间没剩多少了,进去一看,原来 IIS 的日志文件(%windir%\system32\logfiles)下有5-6个G的日志文件,每天的日志约有 30-40M,于是把这些日志文件备份出来,压缩存储了一下,立刻节省了大量磁盘空间出来。
这个网站的访问里并不大,但日志文件为什么这么大呢,打开一看,IIS 的日志记录是很详细完整,但是仔细一看,好多行信息都是 jpg 和 gif ,这可能由于这台服务器是公司/产品宣传的缘故,所以图像文件较多,因此当访问一个页面时,会记录 10-20 条日志信息,从日志的真正用处来看,这些多余的图像文件的访问日志并不需要,而且,这么多的日志信息显然消耗了服务器的计算、IO、存储资源,影响高并发时的性能。
于是想在 IIS 的日志里对记录的 URI 资源类型做一下限制,很遗憾,没有发现这样的选项,在 Google 上似乎也没有找到替代的做法,这样看来,这好象是 IIS 日志记录功能的一个不足之处。
更新:感谢思归提供的解决办法,我把 Images 目录的日志记录取消了之后,日志文件在大小见下图:

另外再次极力推荐一下 IIS 的 gzip 功能,最近一直在研究其对性能和带宽的影响,应该来说,对于绝大多数互联网上的服务器来说,CPU 的资源比带宽资源的利用率更低,因此应该利用这些闲置的 CPU 资源来压缩页面,降低带宽点用,提高响应速度,而且,对于静态内容来说,这种压缩可以生成临时文件,避免每次访问都对资源进行压缩,因此对 CPU 资源的影响也是非常小的。对于大型企业来说,要在集中位置部署一个 B/S 的系统,那么利用 gzip 能大大节省租用运营商通讯线路带来的成本(利用 Internet Security and Accelerator 提供的 HTTP 压缩和缓存功能,也可以达到同样的目的)
在 port80software 这个网站上,提供了一在线测试工具,可能对你的网站进行测试,以确定其是否提供 gzip 压缩以及压缩比重、传输速度的提升等。
Excentrics World Server Controls 是我用了很长时间的一个控件,最近它的 2.0 版本也出来了,可以更好地适应 ASP.NET 2.0 了,我主要是使用其中的日期选择控件(CalendarPopub)、时间选择控件(TimePicker)和数字输入域(NumericBox)。
FreeTextbox 目前的版本 3.1.x 已经很好地支持 Internet Explorer 7.0 了,从这里看到,4.0 也快发布了,从界面上来看,进步不小。
欢迎大家也各自给出自认为用着不错的控件,互通有无。
个人感觉数据访问层应该实现以下几个主要目的:
1) 分离业务层与数据层
2)屏蔽具体数据库的差异(如SQLServer、Oracle、OLEDB、ODBC等)
3)简化数据访问层的代码,经常写一些 Parameter 的设定是很无聊的事情)
先下载并研究了一下Enterprise Library 2.0 ,发现其中的Data Access Application Block有点复杂了,有近 40 个类文件,还需要引用 Configuration、Common、ObjectBuilder 等项目,本身就是一个很大的项目了... 个人觉得还不如上一个版本中的 SQLHelper 对象那么简单方便(Pet Shop 4.0 中的 DabaAccess 项目里就是用 OracleHelper和SQLHelper来实现的)
再来研究Pet Shop 4.0 ,其中主要对象层次一般是(假设Model是业务对象):
ModelInfo <- Model -> IDAL <- SQLServerDAL(或OracleDAL)
其中:
- ModelInfo 是瘦的业务实体数据对象
- Model 实现 ModelInfo 的管理(增、删、改、查询)等,调用 IDAL 来实现
- IDAL 是数据访问层的接口定义
- SQLServerDAL 是 IDAL 在 SQLServer 上的实现,如果是 Oracle,可以利用 OracleDAL 来实现
貌视还不错的结构,只是 DAL 层的里面的代码还是比较多,好多SQL、好多Parameter的操作
再看看 Visual Studio 2005 中带的"个人网站的初学者工具包"的数据访问代码,它只是简单在App_Code中有 Model(瘦的业务实体数据对象)、ModelManager(管理对象,数据层的访问也在其中实现)的两个对象,数据库也只是SQL Server,较为简单,但也不易扩展。
我的一点想法:
1)Enterprise Library 2.0 有些庞大和重量级,学习曲线太长,谨慎使用
2)Visual Studio 2005 中的数据集对象(DataSet)是个好东西,可以简化很多SQL语句的编写和参数的设定
3)Pet Shop 4.0 的总体架构还是不错的(Model <- ModelInfo -> IDAL <- SQLServerDAL),值得参考,但是在SQLServerDAL 和 OracleDAL 不用手动去编写代码,而是调用利用 DataSet 自动生成的代码来实现(SQLServer、Oracle、OLEDB或ODBC等),简单的业务对象管理动作应該是能直接利用DataSet提供的方法直接实现,如果是复杂的数据层操作,可以自己编写代码来实现(如多个表之间的数据操作)
4)musicland 和 JGTM 2006 也提供了一种不错的实现方式,具体参考这篇Post
这样的话,开始提到的三个目的都能达到了。