欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

对Web中的Action使用反射与否影响不大 博客分类: Java WebJDKXP软件测试C 

程序员文章站 2024-02-04 18:29:28
...
感觉反射调用对整个Web过程来说可以忽略不计哦,虽然和直接调用相差还是蛮大的

我机器(945主板、Celeron D 3.06、1G内存、XP系统)的测试结果:
不添加干扰方法
:797
:109

添加了干扰方法后

:812
:120


大家可以做下测试,代码如下
package example;

import java.lang.reflect.Method;

public class Methoder {

	public static void main(String[] args) throws Exception {
		long start = System.currentTimeMillis();
		for (int i = 0; i < 100000; ++i) {
			p1();
		}
		System.out.println(":" + (System.currentTimeMillis() - start));
		start = System.currentTimeMillis();
		for (int i = 0; i < 100000; ++i) {
			p2();
		}
		System.out.println(":" + (System.currentTimeMillis() - start));
	}

	public static void p1() throws Exception {
		Test t = new Test();
		Class c = t.getClass();
		Method m = c.getMethod("sayHello", new Class[0]);
		m.invoke(t, new Object[0]);
	}

	public static void p2() throws Exception {
		Test t = new Test();
		t.sayHello();
	}

}

class Test {
	public void sayHello() {
		//		System.out.println("Test:");
		int l = 0;
		for (int i = 0; i < 1000; ++i) {
			l += i;
		}
	}

	// 以下方法为干扰用,但是两种调用方法都时间延长了点
	public void sayHello1() {
	}

	public void sayHello2() {
	}

	public void sayHello3() {
	}

	public void sayHello4() {
	}

	public void sayHello5() {
	}

	public void sayHello6() {
	}

	public void sayHello7() {
	}

	public void sayHello8() {
	}

	public void sayHello9() {
	}

	public void sayHello10() {
	}

	public void sayHello11() {
	}

	public void sayHello12() {
	}

	public void sayHello13() {
	}

	public void sayHello14() {
	}

	public void sayHello15() {
	}

	public void sayHello16() {
	}

	public void sayHello17() {
	}

	public void sayHello18() {
	}

	public void sayHello19() {
	}

	public void sayHello20() {
	}

	public void sayHello21() {
	}

	public void sayHello22() {
	}

	public void sayHello23() {
	}

	public void sayHello24() {
	}

	public void sayHello25() {
	}

	public void sayHello26() {
	}

	public void sayHello27() {
	}

	public void sayHello28() {
	}

	public void sayHello29() {
	}

	public void sayHello30() {
	}

}