Anonymous avatar Anonymous committed 7448319

two simple string construction efficiencies

the first, removing io_lib:format and lists:flatten, gives a 30-50% improvement in that construction in informal testing

the second, removing nested list traversals, gives a 30% improvement on the 1024-fragment size used here

Comments (0)

Files changed (1)


 handle_cast({OpType,Bucket,Key},State=#state{ops=Ops}) ->
     BucketFrag = list_to_binary(
-                   lists:flatten(
-                     io_lib:format("~s-~b", 
-                                   [Bucket, 
-                                    erlang:phash2(Key) rem ?NFRAGS]))),
+                   [atom_to_list(Bucket),"-",
+                    integer_to_list(erlang:phash2(Key) rem ?NFRAGS)]),
     NewState = ensure_ring(State),
     OpList = case dict:find(BucketFrag, Ops) of
         error ->   [{OpType,Key}];
 %% @private 
 all_frags(Bucket) when is_atom(Bucket) ->
-    [list_to_binary(F) || F <- [atom_to_list(Bucket) ++ "-" ++ X || X <- [integer_to_list(I) || I <- lists:seq(0, ?NFRAGS-1)]]].
+    LB = atom_to_list(Bucket)++"-",
+    [list_to_binary(LB++integer_to_list(I)) || I <- lists:seq(0, ?NFRAGS-1)].
 %% @private
 ensure_ring(State=#state{ring=undefined}) ->
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.