RadDocument - slows when adding more entries

5 posts, 0 answers
  1. Jakub
    Jakub avatar
    14 posts
    Member since:
    Sep 2015

    Posted 02 Aug Link to this post

    Hi,

    i have a sample code:

                    var document = new RadDocument();
                RadDocumentEditor editor = new RadDocumentEditor(document);
                editor.Document.LayoutMode = DocumentLayoutMode.Paged;
                editor.Document.CaretPosition.MoveToFirstPositionInDocument();
     
                for (int i = 0; i < 15000; i++)
                {
                    stopwatch.Start();
                    editor.InsertLine("TEST");
                    stopwatch.Stop();
                    System.Diagnostics.Debug.WriteLine(stopwatch.Elapsed);
                    stopwatch.Reset();
                }

     

    Why each of InsertLine call takes more time than previous?

     

    When RadDocument contains more text it takes more time to insert? This document is not used or binded anywhere.

     

    Thanks.

  2. Jakub
    Jakub avatar
    14 posts
    Member since:
    Sep 2015

    Posted 03 Aug Link to this post

    Hi,

     

    i checked in profiler and each of InsertLine calls later UpdateLayout(). Is there any possibility to SuspendNotifications or something similiar?

     

    My goal is to collect data from database (many entries), insert it to raddocument and export to pdf. I takes so much time it is unacceptable.

     

    After 3 minutes of inserting lines to radDocument, creating TableOfConentsField and then calling radDocumentEditor.InsertField(field, FieldDisplayMode.Result) takes 8 min.

     

    Generated PDF has 900 pages. Is there any way to improve performance?

  3. UI for WPF is Visual Studio 2017 Ready
  4. Tanya
    Admin
    Tanya avatar
    405 posts

    Posted 05 Aug Link to this post

    Hello Jakub,

    The methods of RadDocumentEditor are used to guarantee that the RadDocument instance is properly updated and all required operations and updates are executed after modifying it. Thus, it triggers different methods that take care of these actions. We recommend using this class and its methods in scenarios where the edited document has been already measured.

    However, when the document is just being created, you could directly use its model API to construct the desired content. With this approach, the performance would be better but you should have in mind that once the document is measured (for example, visualized, printed or some content is selected), the RadDocumentEditor should be used when you need to modify it.

    Here is an example of how you could modify the sample snippet from your post to use the model:
    RadDocument document = new RadDocument();
    document.LayoutMode = DocumentLayoutMode.Paged;
    Section section = new Section();
    var stopwatch = new Stopwatch();
     
    for (int i = 0; i < 1500; i++)
    {
        stopwatch.Start();
     
        Span span = new Span("TEST");
        Paragraph paragraph = new Paragraph();
        paragraph.Inlines.Add(span);
        section.Blocks.Add(paragraph);
     
        stopwatch.Stop();
        System.Diagnostics.Debug.WriteLine(stopwatch.Elapsed);
        stopwatch.Reset();
    }
     
    document.Sections.Add(section);

    Another approach that you could use to implement the end goal, is to create the document using our RadWordsProcessing library. This library is part of Telerik Document Processing and allows you create and modify documents of different file formats independently of platform and UI. You should be aware that, due to the specifics of the library, it currently doesn't support TOC fields. We have plans to implement this functionality in a future release and you could subscribe to get notifications about its progress through the related public feature request

    Hope this helps.

    Regards,
    Tanya
    Telerik by Progress
    Do you need help with upgrading your AJAX, WPF or WinForms project? Check the Telerik API Analyzer and share your thoughts.
  5. Jakub
    Jakub avatar
    14 posts
    Member since:
    Sep 2015

    Posted 05 Aug Link to this post

    Hey,

     

    thank you, it really helped. Now I'm creating my whole RadDocument in ~20sec.

     

    Still, I coudn't find any better solution to create ToC. Inserting field TableOfContentsField and calling pdfFormatProvider.Export to export pdf to file takes 6-7 min.

     

    It is UpdateAllFields called 'under the hood' takes this time or something else?

     

    As I mentioned in my previous post: I'm creating ~900 pages document and ToC contains 15-20 pages of links.

  6. Tanya
    Admin
    Tanya avatar
    405 posts

    Posted 10 Aug Link to this post

    Hello Jakub,

    When inserting and updating a TOC field, the whole document should be measured and arranged in order to update the field with the proper values. This involves the execution of many update operations which cannot be reduced.

    In regards to the export to PDF, the situation is pretty similar - the engine ensures that everything (including TOC fields) is updated and measured so the content is properly drawn in the PDF document.

    With that said, I'm afraid there isn't much we could do in order to speed up the process when dealing with such big documents.

    Regards,
    Tanya
    Telerik by Progress
    Do you need help with upgrading your AJAX, WPF or WinForms project? Check the Telerik API Analyzer and share your thoughts.
Back to Top
UI for WPF is Visual Studio 2017 Ready