RDF merge performance in ActiveReports 11

Posted by: rostyslav.fylyshchuk on 27 June 2019, 7:45 am EST

    • Post Options:
    • Link

    Posted 27 June 2019, 7:45 am EST

    Hi,

    We have a workflow which includes step of merging a lot of RDF files.

    Our old service that using ActiveReports 2 COM doing this in several minutes in comparison with ActiveReports 11 that doing it in several hours.

    Here are our performance measurements and memory usage during the merge of two RDF files into one:

    AR2

    Memory usage: up to 200MB

    Performance summary:

    Load from RDF: 0:0.510

    Merge: 0:0.341

    Save to RDF: 0:1.541

    AR11

    Memory usage: up to 2.2GB

    Performance summary:

    Load from RDF: 00:06.49

    Merge: 00:00.04

    Save to RDF: 00:05.95

    Is this a bug or we doing it in wrong way?

    Placed samples on google disk because for some reason getting an error when trying to download zip (<5MB) file here:

    https://drive.google.com/open?id=1D_gnRUCG5Cy0civgysF4wbgkyDTDllbu

    In the archive, you can find projects and RDF files for test.

    Thanks,

    Rostyslav

  • Posted 27 June 2019, 5:17 pm EST

    Hello Rostyslav,

    I am able to reproduce the issue at my end. I have escalated to the development team(273691) and will inform you once I get any reply from them.

    Also, AR11 was declared a legacy product now. It is out of maintenance mode now. Hence, we do not provide support for the same or no bug fixing will be done in the same. I would recommend you to use the latest version of ActiveReports i.e ActiveReports 13. Please refer to the following link for more information:

    https://www.grapecity.com/activereports

    If this is the bug in the AR, then you need to purchase the AR13 to get this fix.

    Sorry for the inconvenience caused to you.

    Thanks.

  • Posted 27 June 2019, 10:10 pm EST

    Thanks, we are looking forward to your reply.

    Also, we tried it with AR13 and got the same result.

  • Posted 30 June 2019, 9:59 pm EST

    Hello,

    Could you please check the memory usage with the following line of code:

    {

    var smallRDFFileName = Path.GetFullPath(“…/…/…/…/ActiveReports11_PerformanceTest/rdf/small.rdf”);

    var bigRDFFileName = Path.GetFullPath(“…/…/…/…/ActiveReports11_PerformanceTest/rdf/big.rdf”);

    var mergedRDFFileName = Path.GetFullPath(“…/…/…/…/ActiveReports11_PerformanceTest/rdf/merged.rdf”);

            var smallReport = new SectionDocument();
            var bigReport = new SectionDocument();
    
              smallReport.CacheToDiskLocation ="Temp"; 
            smallReport.CacheToDisk = true;
                 bigReport.CacheToDiskLocation = "Temp";
            bigReport.CacheToDisk = true;
    
            var reportLoadFromRdfStopwatch = new Stopwatch();
            reportLoadFromRdfStopwatch.Start();
            smallReport.Load(smallRDFFileName);
            bigReport.Load(bigRDFFileName);
            reportLoadFromRdfStopwatch.Stop();
    
            var mergeStopwatch = new Stopwatch();
            mergeStopwatch.Start();
            int index = bigReport.Pages.Count;
            foreach (var page in smallReport.Pages)
            {
                bigReport.Pages.Insert(index++, page);
            }
            mergeStopwatch.Stop();
    
            var reportSaveToRdfStopwatch = new Stopwatch();
            reportSaveToRdfStopwatch.Start();
            bigReport.Save(mergedRDFFileName, RdfFormat.ARNet, SaveOptions.Compressed);
            reportSaveToRdfStopwatch.Stop();
    
            Console.WriteLine("Performance summary:");
            Console.WriteLine("\tLoad from RDF: {0}", reportLoadFromRdfStopwatch.Elapsed.ToString("mm\\:ss\\.ff"));
            Console.WriteLine("\tMerge: {0}", mergeStopwatch.Elapsed.ToString("mm\\:ss\\.ff"));
            Console.WriteLine("\tSave to RDF: {0}", reportSaveToRdfStopwatch.Elapsed.ToString("mm\\:ss\\.ff"));
            Console.ReadLine();
        }
    

    Also, Regarding time, An application based on .NET Framework always works slower than application created in C++.

    Thanks.

  • Posted 1 July 2019, 7:22 pm EST

    Hi,

    Thanks for provided example. Now memory usage is ok, but execution time is worse than before:

    Performance summary:

    Load from RDF: 00:11.46

    Merge: 00:01.13

    Save to RDF: 00:15.37

    Execution time is very important to us because we have a big amount of RDF files, so merge that was taking several minutes with AR2 became several hours with AR11.

    We are aware that .NET applications work slower than C++, but here we see increasing execution time in more than 10 times.

    Thanks,

    Rostyslav

  • Posted 2 July 2019, 5:50 pm EST

    Rostyslav,

    I have forwarded the concern to our development team and will inform you once I get any reply from them,.

    Thanks.

  • Posted 3 July 2019, 8:58 pm EST

    Thanks, we are waiting for your reply.

  • Posted 14 August 2019, 8:07 pm EST

    Hi,

    Do you have any update on this?

  • Posted 14 August 2019, 9:10 pm EST

    Hello,

    I have asked from the development team (273691) and will update you once I get any reply from them.

    Thanks.

  • Posted 1 December 2019, 2:29 pm EST

    Hello,

    Sorry for the delay response!

    We have researched this and have not found a memory leak. The difference in performance is due to architectural difference between environments. We have found some performance improvements when saving without compression and enabling cacetodisk and could recommend that route. We could look into possibly enhancing his code or project for performance, but we would need to go through support for that.

    Thanks,

Need extra support?

Upgrade your support plan and get personal unlimited phone support with our customer engagement team

Learn More

Forum Channels