• 
      

    Improve the performance of HostingServiceClient._build_form_data

    Review Request #8910 — Created April 22, 2017 and submitted

    Information

    Review Board
    release-2.5.x

    Reviewers

    The method in question was doing multiple string concatenations with
    +=, which is very inefficient for large number of operations becuase
    each operation results in a memory allocation. We now build a single
    string with string interpolation for each field and file passed in and
    join all the blobs together, which will require only a single memory
    allocation for the final string, instead of O(|fields| + |files|)
    allocations.

    Ran unit tests.

    Description From Last Updated

    While here, we should also make this a byte string. Here and below.

    chipx86 chipx86

    Let's just make this: if files: Covers None and empty dictionaries.

    chipx86 chipx86

    Let's also use six.iteritems here, pull out the value only once and during iteration, to speed things up a little …

    chipx86 chipx86

    Trailing comma.

    chipx86 chipx86

    We should check if these are unicode and if so, encode to utf-8 before formatting.

    david david

    Same here.

    david david

    Can we switch these two lines to match the order in the return statement?

    david david

    Should be b''.join(...)

    david david
    chipx86
    1. 
        
    2. reviewboard/hostingsvcs/service.py (Diff revision 1)
       
       
      Show all issues

      While here, we should also make this a byte string.

      Here and below.

    3. reviewboard/hostingsvcs/service.py (Diff revision 1)
       
       
      Show all issues

      Let's just make this:

      if files:
      

      Covers None and empty dictionaries.

    4. reviewboard/hostingsvcs/service.py (Diff revision 1)
       
       
       
       
      Show all issues

      Let's also use six.iteritems here, pull out the value only once and during iteration, to speed things up a little more.

    5. reviewboard/hostingsvcs/service.py (Diff revision 1)
       
       
      Show all issues

      Trailing comma.

    6. 
        
    brennie
    brennie
    david
    1. 
        
    2. reviewboard/hostingsvcs/service.py (Diff revision 2)
       
       
       
      Show all issues

      We should check if these are unicode and if so, encode to utf-8 before formatting.

    3. reviewboard/hostingsvcs/service.py (Diff revision 2)
       
       
       
       
      Show all issues

      Same here.

    4. reviewboard/hostingsvcs/service.py (Diff revision 2)
       
       
       
      Show all issues

      Can we switch these two lines to match the order in the return statement?

    5. reviewboard/hostingsvcs/service.py (Diff revision 2)
       
       
      Show all issues

      Should be b''.join(...)

    6. 
        
    brennie
    david
    1. Ship It!
    2. 
        
    brennie
    Review request changed
    Status:
    Completed
    Change Summary:
    Pushed to release-2.5.x (1579fb5)