Grouping and UI Virtualization

9 posts, 0 answers
  1. Tim
    Tim avatar
    10 posts
    Member since:
    Jun 2013

    Posted 07 Dec 2014 Link to this post

    Hi,

    We are using WPF RadGridView in our screen.
    We notice that the screens which have RadGridView without grouping perform better but the screens where grouping is enabled take a long time to load.
    Our best guess is that UI virtualization is not happening for RadGridView with grouping enabled.

    Is UI Virtualization turned off when grouping is enabled? If yes, please suggest an alternative way to improve performance.

    Thanks.
  2. Dimitrina
    Admin
    Dimitrina avatar
    3769 posts

    Posted 08 Dec 2014 Link to this post

    Hello,

    May I ask you to try setting the GroupRenderMode property of RadGridView to "Flat". The Flat mode represents a completely new logic for group rendering, which fixed a lot of other issues reproducible with the old Nested mode. 

    Would you please give the suggested approach a try and let me know how it goes.

    Regards,
    Dimitrina
    Telerik
     

    Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.

     
  3. Tim
    Tim avatar
    10 posts
    Member since:
    Jun 2013

    Posted 08 Dec 2014 in reply to Dimitrina Link to this post

    Hi Dimitrina,

    We have set GroupRenderMode to Flat already.
  4. Dimitrina
    Admin
    Dimitrina avatar
    3769 posts

    Posted 09 Dec 2014 Link to this post

    Hello,

    Generally, the UI Virtualization is still active when there is grouping applied.

    Мay I ask you to try isolating the issue in a demo project illustrating your implementation? You can also take a look at this blog post for a reference on how to isolate an issue. That way we can check it locally and advise further.

    Regards,
    Dimitrina
    Telerik
     

    Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.

     
  5. Tim
    Tim avatar
    10 posts
    Member since:
    Jun 2013

    Posted 09 Dec 2014 in reply to Dimitrina Link to this post

    Hi Dimitrina,
    We are able to isolate the issue. I have uploaded the sample here:  http://1drv.ms/1znQkRX

    Please follow the following steps to reproduce the issue:
    1) Open ZM.SFA.Tab.All.sln under the All folder. ZM.SFA.Tab.Core project should be the startup project.
    2) "C:\Logs\WriteLines.txt" is a file I write to check if virtualization is happening or not. Please create a folder called "Logs" in your C: drive and create a text file with the name "WriteLines.txt".
    3) Rebuild the solution in Debug mode.
    4) Run the application.
    5) Keep the C:\Logs\WriteLines.txt open in Notepad++. Make sure it is empty.
    6) Click on the button "NO GROUPING". The C:\Logs\WriteLines.txt will have 15 entries. Even though there are 127 records in the grid, the getter in model is hit only 15 times.
    7) Click on the Close (X) button on the tab called "CustSearchHeader".
    8) Now clean the C:\Logs\WriteLines.txt file.
    9) Now click on the button "GROUPING".
    10) You will notice that C:\Logs\WriteLines.txt file has 503 entries. This means Virtualization is not happening.​

    Please help.
    Thanks.
  6. Dimitrina
    Admin
    Dimitrina avatar
    3769 posts

    Posted 10 Dec 2014 Link to this post

    Hello,

    Thank you for sending your solution along with the steps on how to reproduce the issue. I was able to reproduce the described behavior. I am going to investigate the case further and contact you back.

    Regards,
    Dimitrina
    Telerik
     

    Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.

     
  7. Dimitrina
    Admin
    Dimitrina avatar
    3769 posts

    Posted 11 Dec 2014 Link to this post

    Hello,

    I tested the demo project and as it turns out the UI virtualization is working properly and GridViewRow objects are only created for the rows requested to be displayed into view.
    For the purpose, I subscribed for the RowLoaded event of the custom ZeeGrid and I write in the file every time a row is loaded:
    private void SearchResultsGrid_RowLoaded_1(object sender, RowLoadedEventArgs e)
    {
        if (e.Row is GridViewRow)
            System.IO.File.AppendAllText(@"C:\Logs\WriteLines.txt",
                "Get" + Environment.NewLine);
    }

    Finally, for a grouped RadGridView I got just 24 records Get in the WriteLines.txt file.

    Would you please check this at your side?

    Regards,
    Dimitrina
    Telerik
     

    Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.

     
  8. Dipti
    Dipti avatar
    3 posts
    Member since:
    May 2012

    Posted 15 Dec 2014 in reply to Dimitrina Link to this post

    Hi Dimitrina, thanks for the reply.

    You are right, same number of records is logged when we place the log in
    ZeeGrid xaml.cs. But there is a huge performance difference in the time taken
    to load the screen with and without grouping.

    I edited the same sample and increased the number of records and added log in
    the UserControl's Loaded event. Please follow the steps below to reproduce the
    performance difference:

    1) Add this in the Loaded event of the SearchCustomer's Loaded event:
        var logger = LogManager.GetLogger("ZM.SFA.Tab");
        logger.Info("SearchCustomer Loaded");
    Add this in the SearchCustomerGrouping's Loaded event:
        var logger = LogManager.GetLogger("ZM.SFA.Tab");
        logger.Info("SearchCustomerGrouping Loaded");
    2) Rebuild the solution in Debug mode and run.
    3) Click on the button "No Grouping".
    4) Open the log file present in: C:\Logs\Logfile.txt. Notice the time difference between the log entries:
    2014-12-15 12:33:43.8167|Info|ZM.SFA.Tab|Entering SearchCustomer
    2014-12-15 12:33:45.4398|Info|ZM.SFA.Tab|SearchCustomer Loaded
    5) The time taken to load 10001 records without grouping is 45.4398- 43.8167= 1.6231 seconds.
    6) Now close the application. Run the application again (to avoid caching).
    7) Click on the button "Grouping".
    8) Now note down the time taken to load the records:
    2014-12-15 12:35:09.4254|Info|ZM.SFA.Tab|Entering SearchCustomer
    2014-12-15 12:35:11.5437|Info|ZM.SFA.Tab|SearchCustomerGrouping Loaded
    9) The time taken to load 10001 records with grouping is 11.5437- 09.4254= 2.1183 seconds.

    There is a performance difference, 1.6 sec without grouping and 2.1 sec with grouping. 

    If UI Virtualization is happening even with grouping, then there is something else which causes this performance degradation when grouping is enabled.
    Can you please suggest how we can address this performance degradation?

    Thanks.
    Dipti 
  9. Dimitrina
    Admin
    Dimitrina avatar
    3769 posts

    Posted 16 Dec 2014 Link to this post

    Hello Dipti,

    As you have already set GroupRenderMode to Flat, then I am afraid there is not much specifically related to grouping I can suggest. I would recommend you going through our online documentation on possible reasons why there would be degraded performance with it. You can consider the tips listed there .

    Regards,
    Dimitrina
    Telerik
     

    Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.

     
Back to Top