Hi,<br><br>- the first link says that jagged arrays should be used because they waste less space<br>  when the sub arrays are of different sizes, not becase they are faster.<br>- the second link says that jagged arrays are faster because multidimensional arrays use<br>
  a method call. This is only true for IL code, mono generates inline code for [,]:Get() and<br>  [,]:Set (). So multi dimensional arrays are faster under mono, since the generated code<br>  can use only one memory load to load a value instead of two with jagged arrays.<br>
. There is nothing we can do to &#39;fix&#39; this, except disabling the optimization.<br><br>                  Zoltan<br><br><div class="gmail_quote">On Tue, Mar 24, 2009 at 3:53 PM, Stifu <span dir="ltr">&lt;<a href="mailto:stifu@free.fr">stifu@free.fr</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>
Microsoft (through MSDN and FxCop) recommends using jagged arrays<br>
(likeThis[][]) over multidimensional arrays(likeThat[,]), because they&#39;re<br>
usually faster, basically (especially if the sub arrays in your jagged array<br>
don&#39;t all have the same size). See:<br>
<a href="http://msdn.microsoft.com/en-us/library/ms182277.aspx" target="_blank">http://msdn.microsoft.com/en-us/library/ms182277.aspx</a><br>
<br>
I made a simple test program that initializes arrays to check the speed<br>
difference, and I could see that with a simple initialization loop, jagged<br>
arrays were indeed a bit faster than multidimensional ones (even if all sub<br>
arrays in the jagged array have the same size, as with a multidimensional<br>
one).<br>
<br>
But before changing all the multidimensional arrays to jagged arrays in my<br>
application, I thought I&#39;d check Mono... with which jagged arrays are slower<br>
than multidimensional ones, unlike with .NET.<br>
<br>
Is it worth filing a bug report for a performance issue like this one?<br>
<br>
For more details on the way .NET generates code for jagged and<br>
multidimensional arrays:<br>
<a href="http://www.guidanceshare.com/wiki/.NET_2.0_Performance_Guidelines_-_Arrays#Use_Jagged_Arrays_Instead_of_Multidimensional_Arrays" target="_blank">http://www.guidanceshare.com/wiki/.NET_2.0_Performance_Guidelines_-_Arrays#Use_Jagged_Arrays_Instead_of_Multidimensional_Arrays</a><br>

<br>
About the tests I ran on my computer:<br>
<br>
.NET (2.0) results:<br>
Multidimensional arrays: 02.89 seconds<br>
Jagged arrays: 02.74 seconds<br>
<br>
Mono (2.4 RC3) results:<br>
Multidimensional arrays: 04.57 seconds<br>
Jagged arrays: 04.94 seconds<br>
<br>
And here&#39;s the test program (feel free to raise the &quot;iterations&quot; value, I<br>
set it to only 3000 because my computer is quite old):<br>
<br>
using System;<br>
using System.Windows.Forms;<br>
<br>
namespace Arrays<br>
{<br>
        public partial class MainForm : Form<br>
        {<br>
                public MainForm()<br>
                {<br>
                        InitializeComponent();<br>
<br>
                        int iterations = 3000;<br>
<br>
                        DateTime start = DateTime.Now;<br>
                        for(int i = 0; i &lt; iterations; i++)<br>
                        {<br>
                                int[,] multiDimensionalArray = new int[128, 128];<br>
<br>
                                for(int y = 0; y &lt; 128; y++)<br>
                                {<br>
                                        for(int x = 0; x &lt; 128; x++)<br>
                                        {<br>
                                                multiDimensionalArray[y, x] = 5;<br>
                                        }<br>
                                }<br>
                        }<br>
                        TimeSpan duration = DateTime.Now - start;<br>
<br>
                        start = DateTime.Now;<br>
                        for(int i = 0; i &lt; iterations; i++)<br>
                        {<br>
                                int[][] jaggedArray = new int[128][];<br>
<br>
                                for(int y = 0; y &lt; 128; y++)<br>
                                {<br>
                                        jaggedArray[y] = new int[128];<br>
<br>
                                        for(int x = 0; x &lt; 128; x++)<br>
                                        {<br>
                                                jaggedArray[y][x] = 5;<br>
                                        }<br>
                                }<br>
                        }<br>
                        TimeSpan duration2 = DateTime.Now - start;<br>
<br>
                        MessageBox.Show(String.Format(<br>
                                &quot;Multidimensional array : {0}\n&quot; +<br>
                                &quot;Jagged array : {1}&quot;,<br>
                                duration.ToString(),<br>
                                duration2.ToString()));<br>
                }<br>
        }<br>
}<br>
<font color="#888888">--<br>
View this message in context: <a href="http://www.nabble.com/Jagged-arrays-over-multidimensional-arrays-tp22682187p22682187.html" target="_blank">http://www.nabble.com/Jagged-arrays-over-multidimensional-arrays-tp22682187p22682187.html</a><br>

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