Hello,

Here is some summarized profiler output in case anyone is interested in
where the time is going. This is the above sample for 1000 rows instead of
10000, and with --profiler=default:time.

Thanks,
Jonathan

On Wed, Dec 9, 2009 at 9:20 AM, Oskar Berggren <oskar.bergg...@gmail.com>wrote:

> 2009/12/9 APS <dev.ma...@apsystems.it>:
> > For sure I can pass a test case, is better that I file a bug report? I
> think
> > that Mono team already knows where datasets are slower than MS.Net and
> maybe
> > can suggest me some "best practice".
> > Btw with the code provided below with MS.Net on a standard developer
> machine
> > and Mono on a bi-processor testing machine (with 2GB of ram):
> >
> > 1000 rows
> > MS.Net: 130ms
> > Mono 2.4.3:  1.2s
> > Mono 2.0.1:  3.5s
> >
> > 10.000 rows
> > MS.Net: less than a second
> > Mono 2.4.3: 114s
> > Mono 2.0.1: 361s
>
>
> So when the data size increase by a factor of 10, on ms.net the time
> taken also seem to increase by a factor of 10, but on mono by a factor
> of 100. Seems like an an O(N) versus an O(N²) algorithm.
>
> The code below contains a loop and you claim the Select part is taking
> the most time. If that is true, it seems to indicate that ms.net
> Select() for this case is O(1) but mono's O(N), with N being the
> number of rows in the table.
>
> /Oskar
>
>
> > I have tables with more than 50.000 rows...I don't know how much it takes
> to
> > perform the elaboration. RowFilter speed up only if applied on small
> > rowsets.
> > The problem is in the .Select method, removing those lines the
> elaboration
> > is quicker in Mono. Testing machines are not with the same resources but
> the
> > difference is too much to think to an hardware difference.
> > Here is the code...
> >
> >             DataSet ds1 = new DataSet();
> >             ds1.Tables.Add();
> >             ds1.Tables[0].Columns.Add("COL1", typeof(string));
> >             ds1.Tables[0].Columns.Add("COL2", typeof(int));
> >             ds1.Tables[0].Columns.Add("COL3", typeof(bool));
> >             for (int i = 0; i < 10000; i++) {
> >                 ds1.Tables[0].Rows.Add(new object[] { "test", i, true });
> >             }
> >             DataSet ds2 = new DataSet();
> >             ds2.Tables.Add();
> >             ds2.Tables[0].Columns.Add("COL1", typeof(string));
> >             ds2.Tables[0].Columns.Add("COL2", typeof(int));
> >             ds2.Tables[0].Columns.Add("COL3", typeof(bool));
> >             for (int i = 0; i < 10000; i++) {
> >                 ds2.Tables[0].Rows.Add(new object[] { "test", i, true });
> >             }
> >             DataSet ds3 = new DataSet();
> >             ds3.Tables.Add();
> >             ds3.Tables[0].Columns.Add("COL1", typeof(string));
> >             ds3.Tables[0].Columns.Add("COL2", typeof(int));
> >             ds3.Tables[0].Columns.Add("COL3", typeof(bool));
> >             for (int i = 0; i < 10000; i++) {
> >                 ds3.Tables[0].Rows.Add(new object[] { "test", i, true });
> >             }
> >             int idx=0;
> >             foreach (DataRow dr in ds1.Tables[0].Rows) {
> >                 DataRow[] dr2 = ds2.Tables[0].Select("COL2=" + idx);
> >                 DataRow[] dr3 = ds3.Tables[0].Select("COL2=" + idx);
> >
> >                 idx++;
> >             }
> >
> >
> >
> >
> > At 21.59 02/12/2009, Nagappan Alagappan wrote:
> >
> > Hello,
> >
> > Do you have a test case to reproduce this issue, which you could share
> with
> > the Mono team ?
> >
> > Thanks
> > Nagappan
> >
> > On Wed, Dec 2, 2009 at 4:05 AM, APS <dev.ma...@apsystems.it > wrote:
> > Hi,
> >
> > I'm testing some old elaboration that cycles on a large datatable and
> > for every rows makes several selections on separated datatables.
> > This elaboration is really slow on mono and fast on MS.NET, let say
> > 400secs vs 4 secs.
> > It seems that last rows are slower that first rows.
> > I made some test on datasets scroll and I saw that mono performance
> > is better than MS.NET so the delay is due to inner selections.
> > I changed datatable.select in defaultview.sort and I gained 200secs,
> > still too slow.
> > Now I've identified some datatable.compute as the main delay source.
> > I'll try to change them using Linq but the question is: there's some
> > known performance problem in dataset heavy usage, there's some best
> > pratice that you can suggest to speed up elaborations?
> > Thanks in advance.
> >
> >
> > _______________________________________________
> > Mono-devel-list mailing list
> > Mono-devel-list@lists.ximian.com
> > http://lists.ximian.com/mailman/listinfo/mono-devel-list
> >
> >
> >
> >
> > --
> > Linux Desktop (GUI Application) Testing Project -
> > http://ldtp.freedesktop.org
> > http://nagappanal.blogspot.com
> >
> > --
> > Il messaggio e' stato analizzato alla ricerca di virus o
> > contenuti pericolosi da MailScanner, ed e'
> > risultato non infetto.
> >
> > _______________________________________________
> > Mono-devel-list mailing list
> > Mono-devel-list@lists.ximian.com
> > http://lists.ximian.com/mailman/listinfo/mono-devel-list
> >
> >
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list@lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>
Total time spent compiling 0 methods (sec): 0
Time(ms) Count   P/call(ms) Method name
########################
 102953.904       1  102953.904   
.<Module>::runtime_invoke_void_object(object,intptr,intptr,intptr)
  Callers (with count) that contribute at least for 1%:
########################
 102953.902       1  102953.902   .Foo::Main(string[])
  Callers (with count) that contribute at least for 1%:
           1  100 % 
.<Module>::runtime_invoke_void_object(object,intptr,intptr,intptr)
########################
 102256.739    2000   51.128   System.Data.DataTable::Select(string)
  Callers (with count) that contribute at least for 1%:
        2000  100 % .Foo::Main(string[])
########################
 102254.160    2000   51.127   
System.Data.DataTable::Select(string,string,DataViewRowState)
  Callers (with count) that contribute at least for 1%:
        2000  100 % System.Data.DataTable::Select(string)
########################
 101706.476    2000   50.853   
System.Data.DataTable::GetIndex(DataColumn[],ListSortDirection[],DataViewRowState,IExpression,bool,bool)
  Callers (with count) that contribute at least for 1%:
        2000  100 % 
System.Data.DataTable::Select(string,string,DataViewRowState)
########################
 101668.556    2000   50.834   System.Data.Common.Index::.ctor(Key)
  Callers (with count) that contribute at least for 1%:
        2000  100 % 
System.Data.DataTable::GetIndex(DataColumn[],ListSortDirection[],DataViewRowState,IExpression,bool,bool)
########################
 101666.608    2000   50.833   System.Data.Common.Index::Reset()
  Callers (with count) that contribute at least for 1%:
        2000  100 % System.Data.Common.Index::.ctor(Key)
########################
 101664.276    2000   50.832   System.Data.Common.Index::RebuildIndex()
  Callers (with count) that contribute at least for 1%:
        2000  100 % System.Data.Common.Index::Reset()
########################
 93049.697 2000000    0.047   System.Data.Common.Key::GetRecord(DataRow)
  Callers (with count) that contribute at least for 1%:
     2000000  100 % System.Data.Common.Index::RebuildIndex()
########################
 88072.318 2000000    0.044   System.Data.Common.Key::CanContain(int)
  Callers (with count) that contribute at least for 1%:
     2000000  100 % System.Data.Common.Key::GetRecord(DataRow)
########################
 86382.649 2000000    0.043   
Mono.Data.SqlExpressions.Comparison::EvalBoolean(DataRow)
  Callers (with count) that contribute at least for 1%:
     2000000  100 % System.Data.Common.Key::CanContain(int)
########################
 49904.807 2000000    0.025   
Mono.Data.SqlExpressions.ColumnReference::Eval(DataRow)
  Callers (with count) that contribute at least for 1%:
     2000000  100 % Mono.Data.SqlExpressions.Comparison::EvalBoolean(DataRow)
########################
 30554.465 2009000    0.015   System.Data.DataRow::get_Item(DataColumn)
  Callers (with count) that contribute at least for 1%:
     2000000  99 % Mono.Data.SqlExpressions.ColumnReference::Eval(DataRow)
########################
 30162.481 2000000    0.015   
Mono.Data.SqlExpressions.Comparison::Compare(IComparable,IComparable,bool)
  Callers (with count) that contribute at least for 1%:
     2000000  100 % Mono.Data.SqlExpressions.Comparison::EvalBoolean(DataRow)
########################
 28866.007 2009000    0.014   
System.Data.DataRow::get_Item(DataColumn,DataRowVersion)
  Callers (with count) that contribute at least for 1%:
     2009000  100 % System.Data.DataRow::get_Item(DataColumn)
########################
 26899.479 2009000    0.013   System.Data.DataRow::get_Item(int,DataRowVersion)
  Callers (with count) that contribute at least for 1%:
     2009000  100 % System.Data.DataRow::get_Item(DataColumn,DataRowVersion)
########################
 26536.273 2000000    0.013   System.Convert::ChangeType(object,Type)
  Callers (with count) that contribute at least for 1%:
     2000000  100 % 
Mono.Data.SqlExpressions.Comparison::Compare(IComparable,IComparable,bool)
########################
 12895.972 2004014    0.006   
System.Globalization.CultureInfo::get_CurrentCulture()
  Callers (with count) that contribute at least for 1%:
     2000000  99 % System.Convert::ChangeType(object,Type)
########################
 11264.164 2009000    0.006   System.Data.DataColumn::get_Item(int)
  Callers (with count) that contribute at least for 1%:
     2009000  100 % System.Data.DataRow::get_Item(int,DataRowVersion)
########################
 9607.594 2009000    0.005   System.Data.Common.DataContainer::get_Item(int)
  Callers (with count) that contribute at least for 1%:
     2009000  100 % System.Data.DataColumn::get_Item(int)
########################
 7355.540 2000000    0.004   
Mono.Data.SqlExpressions.ColumnReference::Unify(object)
  Callers (with count) that contribute at least for 1%:
     2000000  100 % Mono.Data.SqlExpressions.ColumnReference::Eval(DataRow)
########################
 6577.252 2000000    0.003   
Mono.Data.SqlExpressions.ColumnReference::GetReferencedRow(DataRow)
  Callers (with count) that contribute at least for 1%:
     2000000  100 % Mono.Data.SqlExpressions.ColumnReference::Eval(DataRow)
########################
 6037.793 2000000    0.003   
System.Convert::ToType(object,Type,IFormatProvider,bool)
  Callers (with count) that contribute at least for 1%:
     2000000  100 % System.Convert::ChangeType(object,Type)
########################
 5753.030 2004015    0.003   System.Threading.Thread::get_CurrentCulture()
  Callers (with count) that contribute at least for 1%:
     2004014  99 % System.Globalization.CultureInfo::get_CurrentCulture()
########################
 5499.963 4000000    0.001   
Mono.Data.SqlExpressions.ColumnReference::GetColumn(DataRow)
  Callers (with count) that contribute at least for 1%:
     2000000  50 % 
Mono.Data.SqlExpressions.ColumnReference::GetReferencedRow(DataRow)
     2000000  50 % Mono.Data.SqlExpressions.ColumnReference::Eval(DataRow)
_______________________________________________
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list

Reply via email to