原文 http://www.3geye.net/?3/viewspace-3187
昨天,因為工作需要想了解下腳步引擎的實現原理,下載了一個開源的腳本引擎,研究了下,
如果大家需要下載的,請到我空間Google下,就可以發現這個腳本引擎的具體地址。
下面我來說下這個腳本引擎的一些性能問題。
首先來看看他是怎么讀取腳本文件的。
代碼
InputStream is = new Object().getClass().getResourceAsStream(path); //j2me使用
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int ch = 0;
while ( (ch = is.read()) != -1) {
baos.write(ch);
}
上面是作者讀取腳本文件代碼,本人覺得這個代碼的效率很低,一個個字符讀取出來,速度很慢,我測試了下發現讀取一個很簡單的文件需要47毫秒,在Dell 1420的機器上。這樣的效率是很可怕的。
下面看看我是怎么提高他的性能的。
byte[] buff = new byte[512];
long total = 0;
int count = 0;
while ((count = is.read(buff)) > 0) {
baos.write(buff, 0, count);
total += count;
}
我是采用了一個512字節的緩沖區去讀取這些數據,經過測試發現Dell 1420機器上的花費是0毫秒。
快了非常多。
不過腳本引擎除了讀取源文件外,最重要的核心是解釋引擎的速度。
有時間繼續研究下。
昨天,因為工作需要想了解下腳步引擎的實現原理,下載了一個開源的腳本引擎,研究了下,
如果大家需要下載的,請到我空間Google下,就可以發現這個腳本引擎的具體地址。
下面我來說下這個腳本引擎的一些性能問題。
首先來看看他是怎么讀取腳本文件的。
代碼
InputStream is = new Object().getClass().getResourceAsStream(path); //j2me使用
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int ch = 0;
while ( (ch = is.read()) != -1) {
baos.write(ch);
}
上面是作者讀取腳本文件代碼,本人覺得這個代碼的效率很低,一個個字符讀取出來,速度很慢,我測試了下發現讀取一個很簡單的文件需要47毫秒,在Dell 1420的機器上。這樣的效率是很可怕的。
下面看看我是怎么提高他的性能的。
byte[] buff = new byte[512];
long total = 0;
int count = 0;
while ((count = is.read(buff)) > 0) {
baos.write(buff, 0, count);
total += count;
}
我是采用了一個512字節的緩沖區去讀取這些數據,經過測試發現Dell 1420機器上的花費是0毫秒。
快了非常多。
不過腳本引擎除了讀取源文件外,最重要的核心是解釋引擎的速度。
有時間繼續研究下。