JavaFX提高插入图形节点的速度

在JavaFX中,如果想要大量的插入图形节点(node),一定要注意插入的方法。应该是先把大量的图形节点插入到节点序列(sequence )中,然后再一起插入到场景(scene);如果直接把一个一个的节点插入到场景中,将会让你等到花儿都谢了:)

 

举例说明,快速方式:

var stage: Stage = Stage {
    title: "快速插入图形节点"
    width: 640
    height: 480
    scene: Scene {}
}

function run(args:String[]) {
    var i = 0;
    var n = 300;

    var startTime = java.lang.System.currentTimeMillis();
    var lines: Line[];
    while (i < n) {
        insert addLine() into lines;
        i++;
    }
    stage.scene.content = lines;
    var endTime = java.lang.System.currentTimeMillis();
    println("用时{endTime-startTime}ms");
}

function addLine(): Line {
    var x1: Number = Math.random()*640;
    var x2: Number = Math.random()*640;
    var y1: Number = Math.random()*480;
    var y2: Number = Math.random()*480;

    return Line {
        startX: x1, startY: y1
        endX: x2, endY: y2
        strokeWidth: 2
        stroke: Color.BLACK
    };
}

 结果:用时328ms

 

费时的方式:

var stage: Stage = Stage {
    title: "缓慢插入图形节点"
    width: 640
    height: 480
    scene: Scene {}
}

function run(args:String[]) {
    var i = 0;
    var n = 300;

    var startTime = java.lang.System.currentTimeMillis();
    var lines: Line[];
    while (i < n) {
        addLine();
        i++;
    }
    var endTime = java.lang.System.currentTimeMillis();
    println("用时{endTime-startTime}ms");
}

function addLine() {
    var x1: Number = Math.random()*640;
    var x2: Number = Math.random()*640;
    var y1: Number = Math.random()*480;
    var y2: Number = Math.random()*480;

    insert Line {
        startX: x1, startY: y1
        endX: x2, endY: y2
        strokeWidth: 2
        stroke: Color.BLACK
    } into stage.scene.content;
}

结果:用时22469ms

 

差距那是相当的大啊!所以如果要插入大量(百个以上)的图形节点,一定要注意这个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值