Applet中使用ResourceBundle.getBundle为什么会影响性能?

05-12-12 expeditioner

我在Applet中使用ResourceBundle rb=ResourceBundle.getBundle("MyPropertiesFile")...
来读取文件中的设置,问题是为什么执行此代码后再执行
Context context = new InitialContext(myProperties);会需要1分钟左右的时间才能执行结束?
而当在本地运行时则正常,并且如果不使用ResourceBundle.getBundle(...)方法,直接在代码中
使用myProperties.setProperty(...)方法逐个设置myProperties,在网络和本地都可以正常运行.
我感觉好象ResourceBundle.getBundle方法执行完毕后需要进行什么处理.所以影响了
new InitialContext(myProperties).为了验证一下,我只使用ResourceBundle.getBundle(...)
这一行语句执行一次,然后再使用myProperties.setProperty(...)进行设置,这样也会影响速度,
也就是说只要执行了ResourceBundle.getBundle方法,就一定会影响
new InitialContext(myProperties)的速度。
请问大家这是什么原因?如何解决?
代码如下:

Properties myProperties = new Properties();
//通过属性文件设置//
String key = null;
String value = null;
ResourceBundle rb = ResourceBundle.getBundle(
"MyPropertiesFile");//慢的原因在此行
Enumeration enum = rb.getKeys();
while(enum.hasMoreElements()) {
key = enum.nextElement().toString();
value = rb.getString(key);
myProperties.setProperty(key,value);
}
//通过属性文件设置结束//
//不通过属性文件直接设置//
//用这种方式设置则不会影响new InitialContext(myProperties)的执行速度
//myProperties.setProperty(Context.INITIAL_CONTEXT_FACTORY,"org.activemq.jndi.ActiveMQInitialContextFactory");
//myProperties.setProperty(Context.PROVIDER_URL,"tcp://192.168.1.9:61616");
//不通过属性文件直接设置结束//
Context context = new InitialContext(myProperties);
//此行需要执行1分钟左右

banq
2005-12-13 10:23

读取资源会慢的,因为要使用管道和流形式,就象本来并排走,到了一个巷子,只能前后串起来走,慢了。

克服办法:使用缓存,第一次读取放入缓存,以后就不要再去读取这个资源了。

expeditioner
2005-12-13 13:24

谢谢banq的回复.

ResourceBundle rb = ResourceBundle.getBundle("MyPropertiesFile");//慢的原因在此行

在执行完上一行后,再执行

Context context = new InitialContext(myProperties);//此行需要执行1分钟左右

上一行需要1分多钟,但在上一行之前rb已经装文件内容了,为什么还会影响上一行呢。

expeditioner
2005-12-13 17:10

终于解决了
解决方法有两个步骤:
1.我将那个MyPropertiesFile所对应的文件MyPropertiesFile.properties文件名改为MyPropertiesFile_zh_CN.properties,因为我用的是中文Win2000操作系统.
2.不要将MyPropertiesFile_zh_CN.properties文件打包,让客户端自动从服务器下载.

开始我以为如果将那个文件打包,applet读取这个文件时会从一起下载的jar文件中搜索这个文件,因为有多个jar文件,并且jar中的文件非常多,所以影响速度,但经过测试发现,读取文件的方法
ResourceBundle.getBundle("MyPropertiesFile")
执行速度非常快,只是
new InitialContext(myProperties)
执行速度慢。
我实在想不出为什么,请大家一起分析一下。

banq
2005-12-15 11:17

new InitialContext(myProperties)
涉及网络寻找和链接,是可能慢。