Thanks for all the suggestions! I wasn't able to get ProfileView to load, but I was able to use Profile, getting some suggestive information. Boiled down a lot, I see that most of my time is going into these functions:
cnt. line Julia code ==== === ========== 9647 131 full_list = vcat([ ns_name, ns, name ], data_list) 4954 132 full_str = join(full_list, fs_tsv) 4854 106 ns_name = replace(line, re_split, s -> "") 4836 128 data_list = map(key -> get(parm_hash, key, ""), prop_list) 3532 110 split_arr = split(line, re_split) 1214 130 ns, name = split(ns_name, '_', 2) Most of the time is being spent in this set of lines: 4836 data_list = map(key -> get(parm_hash, key, ""), prop_list) 1214 ns, name = split(ns_name, '_', 2) 9647 full_list = vcat([ ns_name, ns, name ], data_list) 4954 full_str = join(full_list, fs_tsv) prop_list contains names of Neo4j node properties. Driven by this, I create data_list, which contains the data values for any properties which have been seen in the input. I then pick up ns_name (eg, "foo_bar"), split into two pieces, and prepend all three to the beginning of data_list to get full_list. Concatenating that with a separator string (typically, a tab), I get the full TSV output string. Suggestions? For example, are any of these functions known to be slow? Alternatively, is there a way to reduce the amount of allocation and de-allocation I'm doing? -r
