数据库优化和反射机制


与没有数据库的网站相比,数据库的存取会降低你的系统性能。但是大多数情况下,网

站和数据库有密不可分的关系,正是数据库给站点提供了大容量、多样性、个性化等特

色,并实现了很多特殊的功能。
  1 不要忘记给数据库做索引。合理的索引能立即显著地提高数据库整个系统的性

能。可以参考有关SQL性能调试书 籍,学会根据所需查询方式合理制作索引和根据索引

方式改进查询语句。
  2 在适当的情况下,尽可能的用存储过程而不是SQL查询,因为前者已经过了预编

译,运行速度更快。同时让数据库仅仅返回你所需要的那些数据,而不是返回大量数据

再让ASP程序过滤。总之要充分和有效地发挥数据库的强大功能,让它按照我们的要求

反馈给我们最合适和最精练的信息。
  3 在可能情况下我们应该使用SQL Server而不是Access。因为Access仅仅是基于

文件的数据库,多用户性能很差。数据库连接尽量使用OLEDB和非DSN方式,因为这种连

接方式有更好的并发性能。
  4 避免使用DAO(Data Access Objects)和RDO(Remote Data Objects)数据源

,因为他们主要应用在单用户的处理系统里,ADO(ActiveX Data Objects)才是为Web

应用设计的。
  5 建立记录集Rescordset的时候要清晰合理地设置数据游标(cursort)和锁定方式

(locktype)。因为在不同的方式下 ASP会以不同的方式操纵数据库,其执行速度也有很

大区别,尤其在大数据量的时候。如果你只想遍历数据,那么默认游标(前进、只读)

会带来最好的性能。
  6 当你引用ADO变量的时候,会消耗较多的CPU周期。因此,如果在一个ASP页面中

多次引用数据库的字段变量,一个较好的方式是将字段值先放入本地变量,然后可以直

接调用本地变量来计算和显示数据。
  7 缓存ADO Connection对象也许不是一个好主意。如果一个连接(Connection)

对象被存储在Application对象中而被所有ASP页面使用,那么所有页面就会争着使用这

个连接。但是如果连接对象被存储在Session对象中,就要为每个用户创建一个数据库

连接,这就减小了连接池的作用,并且增大了Web服务器和数据库服务器的压力。可以

用在每个使用ADO的ASP页创建和释放ADO对象来替代缓存数据库连接。因为IIS内建了数

据库连接池,所以这种方法非常有效,缺点是每个ASP页面都需要进行一些创建和释放

操作。
  8 ASP最强大和主要的用途之一就是对数据库进行操作,在数据库操作中我们要注

意:不要任意使用“SELECT * ......” 形式的SQL查询语句。应该尽量检索你所需要

的那些字段。比如一个表中有10个字段,但是你只会用到其中的一个字段(name),就

该使用“select name from mytable”,而不是用“select * from mytable”。在字

段数比较少的时候,两者的区别可能并不明显,但是当一个表中拥有几十个字段的时候

,数据库会多检索很多你并不需要的数据。在这种情况下你最好不要为了节省打字时间

或者害怕查找对应字段名称的麻烦,而要老老实实地使用“select id,name,age...

from mytable”。
  9 及时关闭打开的记录集对象以及连接(Connection)对象。记录集对象和连接对

象耗费系统资源相当大,因此它们的可用数量是有限的。如果你打开了太多的记录集对

象以及连接对象而最后却没有关闭它们,可能会出现ASP程序刚开始的时候运行速度很

快,而多运行几遍就越来越慢的现象,甚至导致服务器死机。请使用如下方法进行关闭


MyRecordSet.closeSet MyRecordSet=Nothing
Set MyConnection=Nothing   
  10 连接数据库
   仍然使用ODBC系统或者文件DSN来连接数据库,或者使用很快的OLEDB技术来连接

。使用后者,当移动Web文件时,不再需要修改配置。
   OLEDB位于应用程序与ODBC层之间。在ASP页面中,ADO就是位于OLEDB之上的程序

。调用ADO时,首先发送给OLEDB,然后再发送给ODBC层。可以直接连接到OLEDB层,这

么做后,将提高服务器端的性能。怎么直接连接到OLEDB呢?
   如果使用SQLServer 7,使用下面的代码做为连接字符串:
strConnString = "DSN='';DRIVER={SQL SERVER};" & _
        "UID=myuid;PWD=mypwd;" & _
        "DATABASE=MyDb;SERVER=MyServer;"
   最重要的参数就是“DRIVER=”部分。如果你想绕过ODBC而使用OLEDB来访问SQL

Server,使用下面的语法:
strConnString ="Provider=SQLOLEDB.1;Password=mypassword;" &_
        "Persist Security Info=True;User ID=myuid;" & _
        "Initial Catalog=mydbname;" & _
        "Data Source=myserver;Connect Timeout=15"
  

 为什么这很重要?

   现在你可能奇怪为什么学习这种新的连接方法很关键?为什么不使用标准的DSN或

者系统DSN方法?好,根据Wrox在他们的ADO 2.0程序员参考书籍中所做的测试,如果使

用OLEDB连接,要比使用DSN或者DSN-less连接,有以下的性能提高表现:
性能比较:

JAVA反射机制

 

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法

;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调

用对象的方法的功能称为java语言的反射机制。
  Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运

行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运

行时调用任意一个对象的方法;生成动态代理。
  有时候我们说某个语言具有很强的动态性,有时候我们会区分动态和静态的不同技

术与作法。我们朗朗上口动态绑定(dynamic binding)、动态链接(dynamic linking

)、动态加载(dynamic loading)等。然而“动态”一词其实没有绝对而普遍适用的

严格定义,有时候甚至像对象导向当初被导入编程领域一样,一人一把号,各吹各的调


  一般而言,开发者社群说到动态语言,大致认同的一个定义是:“程序运行时,允

许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python

,Ruby是动态语言,C++,Java,C#不是动态语言。
  尽管在这样的定义与分类下Java不是动态语言,它却有着一个非常突出的动态相关

机制:Reflection。这个字的意思是“反射、映象、倒影”,用在Java身上指的是我们

可以于运行时加载、探知、使用编译期间完全未知的 classes。换句话说,Java程序可

以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并

生成其对象实体、或对其fields设值、或唤起其methods1。这种“看透class”的能力

(the ability of the program to examineitself)被称为introspection(内省、

内观、反省)。Reflection和introspection是常被并提的两个术语。
  Java如何能够做出上述的动态特性呢?这是一个深远话题,本文对此只简单介绍一

些概念。整个篇幅最主要还是介绍Reflection APIs,也就是让读者知道如何探索class

的结构、如何对某个“运行时才获知名称的class”生成一份实体、为其fields设值、

调用其 methods。本文将谈到java.lang.Class,以及java.lang.reflect中的Method、

Field、Constructor等等classes。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值