No, I didn't.

As I told this is not a *real* production code. What I actually do in 
the real code is add one object per record, so my sample was right.

The problem is why adding to a hashtable kills reader performance...

Steve Faleiro escribió:
>>>      while( reader.Read() )
>>>      {
>>>          for( int j = 0; j < reader.FieldCount; ++j )
>>>            val=reader[j];
>>>          // table.Add(count, val);
>>>          ++count;
>>>      }
>>>       
>
>      while( reader.Read() )
>      {
>          for( int j = 0; j < reader.FieldCount; ++j )
>          {   
>            val=reader[j];
>            table.Add(count, val);
>          } 
>          ++count;
>      }
>
>
> Perhaps you meant to do this? 
>
>
> --- "[EMAIL PROTECTED]" <[EMAIL PROTECTED]> wrote:
>
>   
>> Hi there,
>>
>> Here I'm trying to save some miliseconds with the Firebird provider 
>> (using embedded database!)
>>
>> Well, I've a weird problem and I'd like you to take a look into it.
>>
>> Well, I'm using the following code to read data from a Firebird
>> database:
>>
>>      object val;
>>
>>      while( reader.Read() )
>>      {
>>          for( int j = 0; j < reader.FieldCount; ++j )
>>            val=reader[j];
>>          // table.Add(count, val);
>>          ++count;
>>      }
>>
>> I'm reading 416310 records.
>>
>> Well, in my poor-slow laptop it takes 50 seconds to read all data.
>>
>> The "funny" thing is: did you see the commented out code? Well, it
>> just 
>> adds the last read field from the record to a hash table. It doesn't 
>> make any sense, it is just a test case extracted from real code, so 
>> don't try to find any logic.
>>
>> Well, the point is: if I uncomment the line -> it takes 158 seconds to
>>
>> read the 416310 records!!!
>>
>> Ok, now you're thinking: yes, that's because adding to the hashtable
>> is 
>> slow. Check the following code:
>>
>>              Hashtable table = new Hashtable();
>>
>>              int ini = Environment.TickCount;
>>
>>              for( int i = 0; i < 416310; ++i )
>>                  table.Add(i, new object());
>>
>>              Console.WriteLine(
>>                  "Time to add {0} objects = {1} ms",
>>                  table.Count,
>>                  Environment.TickCount - ini);
>>
>> It takes 250 ms (miliseconds!) to add the same number of dumb objects
>> to 
>> the Hashtable!!
>>
>> So, somehow, adding records to the Hashtable breaks reader 
>> performance!!! I'm going crazy, and yes, I've repeated the results on
>> a 
>> different computer with different OS and I get the same relative
>> results!
>>
>> If you change the Hashtable by an ArrayList... performance hit goes
>> away!!
>>
>> Ideas???
>>
>>
>> Thanks
>>
>>
>> pablo
>>
>>
>>     
> -------------------------------------------------------------------------
>   
>> This SF.Net email is sponsored by the Moblin Your Move Developer's
>> challenge
>> Build the coolest Linux based applications with Moblin SDK & win great
>> prizes
>> Grand prize is a trip for two to an Open Source event anywhere in the
>> world
>> http://moblin-contest.org/redirect.php?banner_id=100&url=/
>> _______________________________________________
>> Firebird-net-provider mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/firebird-net-provider
>>
>>     
>
>
>
>       
>
> -------------------------------------------------------------------------
> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
> Build the coolest Linux based applications with Moblin SDK & win great prizes
> Grand prize is a trip for two to an Open Source event anywhere in the world
> http://moblin-contest.org/redirect.php?banner_id=100&url=/
> _______________________________________________
> Firebird-net-provider mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/firebird-net-provider
>
>   

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Firebird-net-provider mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/firebird-net-provider

Reply via email to