Thread overview | |||||
---|---|---|---|---|---|
|
November 10, 2010 [Issue 5198] New: Appender much slower when appending ranges of elements than individual elements | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=5198 Summary: Appender much slower when appending ranges of elements than individual elements Product: D Version: D2 Platform: Other OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: Phobos AssignedTo: nobody@puremagic.com ReportedBy: schveiguy@yahoo.com --- Comment #0 from Steven Schveighoffer <schveiguy@yahoo.com> 2010-11-10 11:23:42 PST --- Given an appender Appender!string a, the following code should be roughly equivalent performance-wise: a.put(' '); a.put(" "); But as shown by this code, the version that puts an individual character is an order of magnitude faster. import std.stdio; import std.date; import std.array; void f0() { Appender!string a; a.reserve(100_000_000); foreach(i; 0 .. 100_000_000) { a.put(' '); } } void f1() { Appender!string a; a.reserve(100_000_000); foreach(i; 0 .. 100_000_000) { a.put(" "); } } void main() { auto r = benchmark!(f0)(1); writeln(r, "ms"); r = benchmark!(f1)(1); writeln(r, "ms"); } Results: [2433]ms [13276]ms Swapping the order of testing does not change the situation. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
November 10, 2010 [Issue 5198] Appender much slower when appending ranges of elements than individual elements | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | http://d.puremagic.com/issues/show_bug.cgi?id=5198 Andrei Alexandrescu <andrei@metalanguage.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED CC| |andrei@metalanguage.com --- Comment #1 from Andrei Alexandrescu <andrei@metalanguage.com> 2010-11-10 11:55:35 PST --- Great catch! I'm marking this as "assigned" as I see you've already assign it to yourself. Long term I wonder whether we should include performance tests as part of build acceptance tests. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
December 27, 2010 [Issue 5198] Appender much slower when appending ranges of elements than individual elements | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | http://d.puremagic.com/issues/show_bug.cgi?id=5198 Steven Schveighoffer <schveiguy@yahoo.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|ASSIGNED |RESOLVED Resolution| |FIXED --- Comment #2 from Steven Schveighoffer <schveiguy@yahoo.com> 2010-12-27 11:20:47 PST --- turns out the appender was not reserving any extra space when appending an array, it was simply reallocating -- just enough to hold the existing data + the new data (in this example, 1 more element). I fixed it so the same algorithm used to expand the array for one element is now used to append an array of elements. changeset http://www.dsource.org/projects/phobos/changeset/2237 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
Copyright © 1999-2021 by the D Language Foundation