- 论坛徽章:
- 0
|
下面的这个小程序调试通过并能运行,但发现效率不高,在两台机器上运行,发现四个问题:1、两台机器的CPU的占用率比较高,可以达到50%以上(机器还算可以的服务器为AMD3400+,客户端为2.8G preset的),2、对网络资源占用比较厉害,居然会用到10M的带宽!!!3、运行效率不高,10000次调用要10多秒,100000次就更不必说了;4、程序运行出现Net link start...之后,要比较久(2~5秒钟)才能进行网络调用,这个连接的过程是比较久的。
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.net.MalformedURLException;
import java.rmi.NotBoundException;
public class CalculatorClient {
public static void main(String[] args) {
System.out.println("Net link start...");
for(int i=0;i<100000;i++)
{
try {
Calculator c = (Calculator)Naming.lookup("rmi://192.168.1.10/CalculatorService");
/* System.out.println( c.sub(4, 3) );
System.out.println( c.add(4, 5) );
System.out.println( c.mul(3, 6) );
System.out.println( c.div(9, 3) ); */
c.sub(4, 3);
c.add(4, 5);
c.mul(3, 6);
c.div(9, 3);
}
catch (MalformedURLException murle) {
System.out.println();
System.out.println(
"MalformedURLException");
System.out.println(murle);
}
catch (RemoteException re) {
System.out.println();
System.out.println(
"RemoteException");
System.out.println(re);
}
catch (NotBoundException nbe) {
System.out.println();
System.out.println(
"NotBoundException");
System.out.println(nbe);
}
catch (
java.lang.ArithmeticException
ae) {
System.out.println();
System.out.println(
"java.lang.ArithmeticException");
System.out.println(ae);
}
}
}
}
分析该程序,发现可以做一点优化:每个循环都会执行Calculator c = (Calculator)Naming.lookup("rmi://192.168.1.10/CalculatorService"); 其实C初始化了一次之后,就可以多次使用,要怎样优化才能更好?
把它改成这样,总是调试不成功:
//CalculatorClient.java
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.net.MalformedURLException;
import java.rmi.NotBoundException;
public class CalculatorClient {
public static void main(String[] args) {
System.out.println("Net link start...");
boolean j=false;
for(int i=0;i<100000;i++)
{
try {
if(j==false)
{ Calculator c = (Calculator)Naming.lookup("rmi://192.168.1.10/CalculatorService");
j=true;
}
// Calculator c = (Calculator)Naming.lookup("rmi://192.168.1.10/CalculatorService");
/* System.out.println( c.sub(4, 3) );
System.out.println( c.add(4, 5) );
System.out.println( c.mul(3, 6) );
System.out.println( c.div(9, 3) ); */
c.sub(4, 3);
c.add(4, 5);
c.mul(3, 6);
c.div(9, 3);
}
catch (MalformedURLException murle) {
System.out.println();
System.out.println(
"MalformedURLException");
System.out.println(murle);
}
catch (RemoteException re) {
System.out.println();
System.out.println(
"RemoteException");
System.out.println(re);
}
catch (NotBoundException nbe) {
System.out.println();
System.out.println(
"NotBoundException");
System.out.println(nbe);
}
catch (
java.lang.ArithmeticException
ae) {
System.out.println();
System.out.println(
"java.lang.ArithmeticException");
System.out.println(ae);
}
}
}
}
或者这样改也不行:
//CalculatorClient.java
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.net.MalformedURLException;
import java.rmi.NotBoundException;
public class CalculatorClient {
public static void main(String[] args) {
System.out.println("Net link start...");
Calculator c = (Calculator)Naming.lookup("rmi://192.168.1.10/CalculatorService");
for(int i=0;i<100000;i++)
{
try {
// Calculator c = (Calculator)Naming.lookup("rmi://192.168.1.10/CalculatorService");
/* System.out.println( c.sub(4, 3) );
System.out.println( c.add(4, 5) );
System.out.println( c.mul(3, 6) );
System.out.println( c.div(9, 3) ); */
c.sub(4, 3);
c.add(4, 5);
c.mul(3, 6);
c.div(9, 3);
}
catch (MalformedURLException murle) {
System.out.println();
System.out.println(
"MalformedURLException");
System.out.println(murle);
}
catch (RemoteException re) {
System.out.println();
System.out.println(
"RemoteException");
System.out.println(re);
}
catch (NotBoundException nbe) {
System.out.println();
System.out.println(
"NotBoundException");
System.out.println(nbe);
}
catch (
java.lang.ArithmeticException
ae) {
System.out.println();
System.out.println(
"java.lang.ArithmeticException");
System.out.println(ae);
}
}
}
}
[ 本帖最后由 jxh_ty 于 2005-12-6 13:46 编辑 ] |
|