<div dir="ltr">Just thought I should mention that I tried another thing:<div><br></div><div>Using my original example:</div><div><a href="http://sloppyfocus.com/slowSetFromParticularButSeeminglyNormalArrayOfStrings.html">http://sloppyfocus.com/slowSetFromParticularButSeeminglyNormalArrayOfStrings.html</a><br></div><div>Keeping the code as it is but adding a space to the end of every line in the actual text file (strings.txt).</div><div><br><div><div>This actually makes the slow test(strings) run almost as fast as the fast test(caseSwappedStrings), 0.09 seconds, so about a hundred times faster just because the text file has an extra space at the end of each line.</div><div><br></div><div>I just can&#39;t see how Arnold Schwaighofer&#39;s explanation explains that ... An added space character at the end of each line of that text file is just one more ASCII character, how can that make test(strings) so much faster?<br></div><div><div><div><br></div><div>And other operations on the text file makes the slow test faster too, like eg:</div><div>Inserting a space as the first char of each line, 0.9 seconds.</div><div>Removing all spaces, 0.9 seconds.</div><div>Replacing all spaces with &quot;-&quot; (replacing the dashes back to spaces made it slow again), 0.9 seconds.</div></div><div>Replacing all &quot;a&quot; with &quot;*&quot;, 0.9 seconds.</div><div>Swapping case (now in the actual file instead of programmatically), 2.3 seconds.</div><div>(I only tried operations that kept the resulting strings unique and their characters plain ASCII.)</div><div><br></div><div>/Jens</div></div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Mar 2, 2016 at 6:28 PM, Arnold Schwaighofer <span dir="ltr">&lt;<a href="mailto:aschwaighofer@apple.com" target="_blank">aschwaighofer@apple.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">That is the difference between a “String” type instance that can use the ascii fast path and NSString backed “String” type instances.<br>
<br>
When the code translates the string (the map function that calls upper case) it becomes a natively backed “String” that isASCII.<br>
<br>
// The strings in strings.txt are not strange in any way, they all match ^[a-zA-Z ]+$.<br>
<br>
Set the isASCII bit and things are blazing fast.<br>
<br>
The other path is that componentsSeparatedByString(separator: String) -&gt; [String] returns an “[String]” where every “String” is backed by “NSString”. When it comes to do comparison we call a NSString function on the NSString and this is where the difference in performance comes from.<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
<br>
&gt; On Mar 2, 2016, at 12:15 AM, Jens Persson via swift-dev &lt;<a href="mailto:swift-dev@swift.org">swift-dev@swift.org</a>&gt; wrote:<br>
&gt;<br>
&gt; I guess it would be possible to isolate the problem by analyzing my example, and thereby making it possible to write a smaller benchmark which doesn&#39;t need that big textfile. I didn&#39;t manage to do that however, hence my question about the problem here.<br>
&gt; /Jens<br>
&gt;<br>
&gt; On Wed, Mar 2, 2016 at 9:11 AM, Jens Persson &lt;<a href="mailto:jens@bitcycle.com">jens@bitcycle.com</a>&gt; wrote:<br>
&gt; Thanks, but I&#39;ll have to invite anyone with more time and experience to do that.<br>
&gt;<br>
&gt; One (of many) thing(s) I wouldn&#39;t know how include/handle is the 1.3 MB text file for the particular arrayOfStrings that makes Set(arrayOfStrings) slow. It seems a bit unnecessary/bloating to put it in the code base.<br>
&gt;<br>
&gt; /Jens<br>
&gt;<br>
&gt; On Tue, Mar 1, 2016 at 11:58 PM, Nadav Rotem &lt;<a href="mailto:nrotem@apple.com">nrotem@apple.com</a>&gt; wrote:<br>
&gt; Hi Jens,<br>
&gt;<br>
&gt; Thanks for reporting this issue. I don’t know what’s going on but we’ll take a look.<br>
&gt;<br>
&gt; I think it would be great if you could add this program as a benchmark under swift/benchmarks/.  This will allow us to track the performance of this test and ensure that we don’t regress.<br>
&gt;<br>
&gt; Thanks,<br>
&gt; Nadav<br>
&gt;<br>
&gt;&gt; On Mar 1, 2016, at 5:01 AM, Jens Persson via swift-dev &lt;<a href="mailto:swift-dev@swift.org">swift-dev@swift.org</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; For some particular arrays of strings, creating a Set&lt;String&gt;(arrayOfStrings) takes about 100 to 200 times longer than for other very similar arrays of strings (equally many unique simple [a-zA-Z ]+ strings).<br>
&gt;&gt;<br>
&gt;&gt; I&#39;ve put together a tiny program to demonstrate the problem here:<br>
&gt;&gt; <a href="http://sloppyfocus.com/slowSetFromParticularButSeeminglyNormalArrayOfStrings.html" rel="noreferrer" target="_blank">http://sloppyfocus.com/slowSetFromParticularButSeeminglyNormalArrayOfStrings.html</a><br>
&gt;&gt;<br>
&gt;&gt; Is this due to a bug / performance problem in Set or can it be explained (and solved) in some way?<br>
&gt;&gt;<br>
&gt;&gt; /Jens<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; swift-dev mailing list<br>
&gt;&gt; <a href="mailto:swift-dev@swift.org">swift-dev@swift.org</a><br>
&gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-dev" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-dev</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; bitCycle AB | Smedjegatan 12 | 742 32 Östhammar | Sweden<br>
&gt; <a href="http://www.bitcycle.com/" rel="noreferrer" target="_blank">http://www.bitcycle.com/</a><br>
&gt; Phone: +46-73-753 24 62<br>
&gt; E-mail: <a href="mailto:jens@bitcycle.com">jens@bitcycle.com</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; bitCycle AB | Smedjegatan 12 | 742 32 Östhammar | Sweden<br>
&gt; <a href="http://www.bitcycle.com/" rel="noreferrer" target="_blank">http://www.bitcycle.com/</a><br>
&gt; Phone: +46-73-753 24 62<br>
&gt; E-mail: <a href="mailto:jens@bitcycle.com">jens@bitcycle.com</a><br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; swift-dev mailing list<br>
&gt; <a href="mailto:swift-dev@swift.org">swift-dev@swift.org</a><br>
&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-dev" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-dev</a><br>
<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">bitCycle AB | Smedjegatan 12 | 742 32 Östhammar | Sweden<br><a href="http://www.bitcycle.com/" target="_blank">http://www.bitcycle.com/</a><br>Phone: +46-73-753 24 62<br>E-mail: <a href="mailto:jens@bitcycle.com" target="_blank">jens@bitcycle.com</a><br><br></div>
</div>