JavaFx: Rendering 500k rectangles is very slow the 1.time, but fast afterwards. Why?












0















I am using JavaFx and Canvas to render a map as 500k colored rectangles. The 1.time I render them, it takes around 40 seconds, but later less than 1 second:



1.Time:



10:11:17:133 INFO jfws.util.map.MapRenderer - render()
10:11:54:469 INFO jfws.editor.map.MapEditorController - render(): Finished


Later:



10:40:23:905 INFO jfws.util.map.MapRenderer - render()
10:40:23:989 INFO jfws.editor.map.MapEditorController - render(): Finished


The code contains 2 loops with 2 commands per rectangle:



graphicsContext.setFill(color);
graphicsContext.fillRect(x, y, width, height);


See MapRenderer.java.



I am also rendering a small map with 200 rectangles many times before that without any problems.










share|improve this question























  • it's due to the cache. When you open something, you load many abojet, but when you close it, some data stay il your computer to load faster.

    – charles Lgn
    Nov 24 '18 at 10:26











  • Even if I modify part of the map (~5k rectangles), it still renders the whole 500k in less than a second.

    – Orchaldir
    Nov 24 '18 at 10:32













  • What hapen if thé first tome you load 1 rectangle ?

    – charles Lgn
    Nov 24 '18 at 10:33











  • An loading a different map, which changes the color of every rectangle is equally fast.

    – Orchaldir
    Nov 24 '18 at 10:34











  • The application starts with rendering a map with 200 rectangles. That happens very fast. Later it switches to the larger map and it slows down the 1.time rendering it.

    – Orchaldir
    Nov 24 '18 at 10:41
















0















I am using JavaFx and Canvas to render a map as 500k colored rectangles. The 1.time I render them, it takes around 40 seconds, but later less than 1 second:



1.Time:



10:11:17:133 INFO jfws.util.map.MapRenderer - render()
10:11:54:469 INFO jfws.editor.map.MapEditorController - render(): Finished


Later:



10:40:23:905 INFO jfws.util.map.MapRenderer - render()
10:40:23:989 INFO jfws.editor.map.MapEditorController - render(): Finished


The code contains 2 loops with 2 commands per rectangle:



graphicsContext.setFill(color);
graphicsContext.fillRect(x, y, width, height);


See MapRenderer.java.



I am also rendering a small map with 200 rectangles many times before that without any problems.










share|improve this question























  • it's due to the cache. When you open something, you load many abojet, but when you close it, some data stay il your computer to load faster.

    – charles Lgn
    Nov 24 '18 at 10:26











  • Even if I modify part of the map (~5k rectangles), it still renders the whole 500k in less than a second.

    – Orchaldir
    Nov 24 '18 at 10:32













  • What hapen if thé first tome you load 1 rectangle ?

    – charles Lgn
    Nov 24 '18 at 10:33











  • An loading a different map, which changes the color of every rectangle is equally fast.

    – Orchaldir
    Nov 24 '18 at 10:34











  • The application starts with rendering a map with 200 rectangles. That happens very fast. Later it switches to the larger map and it slows down the 1.time rendering it.

    – Orchaldir
    Nov 24 '18 at 10:41














0












0








0








I am using JavaFx and Canvas to render a map as 500k colored rectangles. The 1.time I render them, it takes around 40 seconds, but later less than 1 second:



1.Time:



10:11:17:133 INFO jfws.util.map.MapRenderer - render()
10:11:54:469 INFO jfws.editor.map.MapEditorController - render(): Finished


Later:



10:40:23:905 INFO jfws.util.map.MapRenderer - render()
10:40:23:989 INFO jfws.editor.map.MapEditorController - render(): Finished


The code contains 2 loops with 2 commands per rectangle:



graphicsContext.setFill(color);
graphicsContext.fillRect(x, y, width, height);


See MapRenderer.java.



I am also rendering a small map with 200 rectangles many times before that without any problems.










share|improve this question














I am using JavaFx and Canvas to render a map as 500k colored rectangles. The 1.time I render them, it takes around 40 seconds, but later less than 1 second:



1.Time:



10:11:17:133 INFO jfws.util.map.MapRenderer - render()
10:11:54:469 INFO jfws.editor.map.MapEditorController - render(): Finished


Later:



10:40:23:905 INFO jfws.util.map.MapRenderer - render()
10:40:23:989 INFO jfws.editor.map.MapEditorController - render(): Finished


The code contains 2 loops with 2 commands per rectangle:



graphicsContext.setFill(color);
graphicsContext.fillRect(x, y, width, height);


See MapRenderer.java.



I am also rendering a small map with 200 rectangles many times before that without any problems.







java javafx 2d rendering






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 24 '18 at 10:09









OrchaldirOrchaldir

116




116













  • it's due to the cache. When you open something, you load many abojet, but when you close it, some data stay il your computer to load faster.

    – charles Lgn
    Nov 24 '18 at 10:26











  • Even if I modify part of the map (~5k rectangles), it still renders the whole 500k in less than a second.

    – Orchaldir
    Nov 24 '18 at 10:32













  • What hapen if thé first tome you load 1 rectangle ?

    – charles Lgn
    Nov 24 '18 at 10:33











  • An loading a different map, which changes the color of every rectangle is equally fast.

    – Orchaldir
    Nov 24 '18 at 10:34











  • The application starts with rendering a map with 200 rectangles. That happens very fast. Later it switches to the larger map and it slows down the 1.time rendering it.

    – Orchaldir
    Nov 24 '18 at 10:41



















  • it's due to the cache. When you open something, you load many abojet, but when you close it, some data stay il your computer to load faster.

    – charles Lgn
    Nov 24 '18 at 10:26











  • Even if I modify part of the map (~5k rectangles), it still renders the whole 500k in less than a second.

    – Orchaldir
    Nov 24 '18 at 10:32













  • What hapen if thé first tome you load 1 rectangle ?

    – charles Lgn
    Nov 24 '18 at 10:33











  • An loading a different map, which changes the color of every rectangle is equally fast.

    – Orchaldir
    Nov 24 '18 at 10:34











  • The application starts with rendering a map with 200 rectangles. That happens very fast. Later it switches to the larger map and it slows down the 1.time rendering it.

    – Orchaldir
    Nov 24 '18 at 10:41

















it's due to the cache. When you open something, you load many abojet, but when you close it, some data stay il your computer to load faster.

– charles Lgn
Nov 24 '18 at 10:26





it's due to the cache. When you open something, you load many abojet, but when you close it, some data stay il your computer to load faster.

– charles Lgn
Nov 24 '18 at 10:26













Even if I modify part of the map (~5k rectangles), it still renders the whole 500k in less than a second.

– Orchaldir
Nov 24 '18 at 10:32







Even if I modify part of the map (~5k rectangles), it still renders the whole 500k in less than a second.

– Orchaldir
Nov 24 '18 at 10:32















What hapen if thé first tome you load 1 rectangle ?

– charles Lgn
Nov 24 '18 at 10:33





What hapen if thé first tome you load 1 rectangle ?

– charles Lgn
Nov 24 '18 at 10:33













An loading a different map, which changes the color of every rectangle is equally fast.

– Orchaldir
Nov 24 '18 at 10:34





An loading a different map, which changes the color of every rectangle is equally fast.

– Orchaldir
Nov 24 '18 at 10:34













The application starts with rendering a map with 200 rectangles. That happens very fast. Later it switches to the larger map and it slows down the 1.time rendering it.

– Orchaldir
Nov 24 '18 at 10:41





The application starts with rendering a map with 200 rectangles. That happens very fast. Later it switches to the larger map and it slows down the 1.time rendering it.

– Orchaldir
Nov 24 '18 at 10:41












1 Answer
1






active

oldest

votes


















0














I found an answer! :-D



I render the large map with PixelWriter into an WritableImage and then draw the image on the canvas. Now the rendering takes less than 1 second!



See commit.






share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53457105%2fjavafx-rendering-500k-rectangles-is-very-slow-the-1-time-but-fast-afterwards%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    I found an answer! :-D



    I render the large map with PixelWriter into an WritableImage and then draw the image on the canvas. Now the rendering takes less than 1 second!



    See commit.






    share|improve this answer




























      0














      I found an answer! :-D



      I render the large map with PixelWriter into an WritableImage and then draw the image on the canvas. Now the rendering takes less than 1 second!



      See commit.






      share|improve this answer


























        0












        0








        0







        I found an answer! :-D



        I render the large map with PixelWriter into an WritableImage and then draw the image on the canvas. Now the rendering takes less than 1 second!



        See commit.






        share|improve this answer













        I found an answer! :-D



        I render the large map with PixelWriter into an WritableImage and then draw the image on the canvas. Now the rendering takes less than 1 second!



        See commit.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Dec 4 '18 at 21:49









        OrchaldirOrchaldir

        116




        116
































            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53457105%2fjavafx-rendering-500k-rectangles-is-very-slow-the-1-time-but-fast-afterwards%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Wiesbaden

            Marschland

            Dieringhausen