Mono&#39;s RWLock uses CLR monitors, so it&#39;s not trivial to improve over it.<br><br><br><div class="gmail_quote">On Thu, Sep 24, 2009 at 1:19 PM, LKeene <span dir="ltr">&lt;<a href="mailto:lionel.keene@gmail.com">lionel.keene@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
Hello fellow Mono+Mac coders.<br>
<br>
I&#39;ve had a couple of posts in the MacOS section of the Mono forum inquiring<br>
about any known bottlenecks in Mono on OSX. This was due to some strange<br>
behavior my WinForms app was delivering when running on Mac, whereas on<br>
Windows and Linux all was well. I&#39;ve finally tracked down the source and it<br>
seems to be Mono&#39;s implementation of the ReaderWriterLock class. I&#39;m using<br>
an asynchronous strategy to read/process binary files...essentially I have<br>
one thread reading chunks from the disk and then passing it off to a cluster<br>
of worker threads that process the data. While the worker threads process<br>
the data, the read thread goes ahead and reads the next chunk, etc. I use<br>
the ReaderWriterLock to synchronize the operation.<br>
<br>
This method is working very well on Windows and Linux i.e. I am able to<br>
completely hide the processing time &quot;inside&quot; the latency of the read<br>
operation on my Core i7. To process my entire binary test file takes approx.<br>
0.4 seconds on Win/Linux. The problem arises when running the same app on<br>
Mac. The time goes from 0.4 sec to 12+ seconds. After looking everywhere<br>
else for the bottleneck, out of desperation I dropped the number of worker<br>
threads to 1 (now using 1 read thread and 1 worker thread, same<br>
synchronization). The execution time on Win/Linux remains very similar<br>
(around 0.4 secs) but the execution time on Mac drops from 12 secs to 0.5<br>
secs. Increasing the number of worker threads to 7 bumps up the execution<br>
time to 12+ seconds again.<br>
<br>
I don&#39;t know what is causing this, but for now I would recommend anyone<br>
trying to use the ReaderWriterLock class to consider &quot;rolling their own&quot; via<br>
synchronization primitives.<br>
<br>
Anyone else see this behavior?<br>
<br>
-L<br>
<font color="#888888">--<br>
View this message in context: <a href="http://www.nabble.com/Massive%28%21%29-ReaderWriterLock-bottleneck-tp25577788p25577788.html" target="_blank">http://www.nabble.com/Massive%28%21%29-ReaderWriterLock-bottleneck-tp25577788p25577788.html</a><br>

Sent from the Mono - OSX mailing list archive at Nabble.com.<br>
<br>
_______________________________________________<br>
Mono-osx mailing list<br>
<a href="mailto:Mono-osx@lists.ximian.com">Mono-osx@lists.ximian.com</a><br>
<a href="http://lists.ximian.com/mailman/listinfo/mono-osx" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-osx</a><br>
</font></blockquote></div><br>