I think there's one fundamental rule: add as much per operation as possible. Hence references to lines.Text := and lines.Assign() etc.
That's particularly important with visual components (e.g. TMemo), and vitally important if a component is visible.
However, you (OP) also mention an array of strings: if this is a dynamic array you /really/ do not want to be appending individual strings (i.e. increasing the list by one each time) since each change of size implies some level of background memory management; it's far more efficient to increase it by some larger amount and then to fill in the elements by indexed assignment.
MarkMLl