From 670fe1f3e5249eb5151583484282da49f7f65914 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Fri, 21 Oct 2011 00:12:45 -0400 Subject: [PATCH] Performance - Added std::vector::reserve calls to reduce allocations and copying. --- src/TDB2.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/TDB2.cpp b/src/TDB2.cpp index 206a69a46..2bee95696 100644 --- a/src/TDB2.cpp +++ b/src/TDB2.cpp @@ -271,6 +271,9 @@ void TF2::load_tasks () int line_number = 0; try { + // Reduce unnecessary allocations/copies. + _tasks.reserve (_lines.size ()); + std::vector ::iterator i; for (i = _lines.begin (); i != _lines.end (); ++i) { @@ -1519,6 +1522,10 @@ int TDB2::gc () std::vector pending_tasks_after; std::vector completed_tasks_after; + // Reduce unnecessary allocation/copies. + pending_tasks_after.reserve (pending_tasks.size ()); + completed_tasks_after.reserve (completed_tasks.size ()); + // Scan all pending tasks, looking for any that need to be relocated to // completed, or need to be 'woken'. Date now; @@ -1624,8 +1631,15 @@ int TDB2::next_id () //////////////////////////////////////////////////////////////////////////////// const std::vector TDB2::all_tasks () { - std::vector all = pending.get_tasks (); - std::vector extra = completed.get_tasks (); + std::vector all (pending._tasks.size () + + pending._added_tasks.size () + + completed._tasks.size () + + completed._added_tasks.size ()); + all = pending.get_tasks (); + + std::vector extra (completed._tasks.size () + + completed._added_tasks.size ()); + extra = completed.get_tasks (); std::vector ::iterator task; for (task = extra.begin (); task != extra.end (); ++task)