QlExpress 性能優化(二)

一.通過上篇QLExpress的例子我們知道了它的執行過程,總結爲五個階段

  1. 單詞分析
  2. 單詞類型分析
  3. 語法分析
  4. 生成指令
  5. 執行指令

其中前4個過程涉及語法的匹配運算等非常耗時,要做到使qlExpress的性能最大化,你可以做以下兩方面的優化:

  • 1、ExpressRunner設置成singleton(結合spring是非常容易做到的)
  • 2、execute方法的參數設置  isCache =true(它會把 expressString 編譯成一段指令,緩存在內存中,相當於緩存了(1)->(4)的過程)

二.測試qlexpress性能

public static void main(String[] args) throws Exception{
        Stopwatch s = Stopwatch.createStarted();
        ExpressRunner runner = new ExpressRunner(false,true);
        String express = "10 * 10 + 1 + 2 * 3 + 5 * 2";
        //isCache設置成false
        Object r = runner.execute(express,null, null, false,false);
        for(int i = 0;i<10000;i++){
            runner.execute(express,null, null, false,true);
            System.out.println("表達式計算:" + express + " = " + r);
        }
        System.out.println(s.stop());
    }

運行耗時:  9.123 s

通過設置isCache=true

 public static void main(String[] args) throws Exception{
        Stopwatch s = Stopwatch.createStarted();
        ExpressRunner runner = new ExpressRunner(false,true);
        String express = "10 * 10 + 1 + 2 * 3 + 5 * 2";
        Object r = runner.execute(express,null, null, true,false);
        for(int i = 0;i<10000;i++){
            runner.execute(express,null, null, true,true);
            System.out.println("表達式計算:" + express + " = " + r);
        }
        System.out.println(s.stop());
    }

運行耗時:2.976 s

同時可以觀察控制檯的打印信息,未設置isCache=true時候,控制檯會反覆進行1-5階段

isCache只進行了一次1-5階段的解析;

摘文

https://blog.csdn.net/express_wind

感謝博主分享,學無止境


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章