The performance when doing parametrized builk inserts is poor
-------------------------------------------------------------

                 Key: DNET-532
                 URL: http://tracker.firebirdsql.org/browse/DNET-532
             Project: .NET Data provider
          Issue Type: Improvement
          Components: ADO.NET Provider
    Affects Versions: 4.0.0.0
         Environment: Any
            Reporter: Toni Martir
            Assignee: Jiri Cincura


The performance when executing a query with named parameters (50 or more) is 
very poor.
Example:
 With current code it  takes about 40 seconds to insert 20.000 records.
 With small optimizations it take about 5 seconds.

The problem is in FbParameterCollection.IndexOf

I obtained the much better results modifying FbParameterCollection and 
FbParameter,
but may be this is not the correct way...

With the proposed optimization only FbParameterCollection must be modified and 
small modification to FbParameter.

      SortedList<string, int> sortedparams;
      SortedList<string, int> sortedparamsint;

Constructor
         this.sortedparams = new SortedList<string, int>();
         this.sortedparamsint = new SortedList<string, int>();

Add
            this.parameters.Add(value);
            sortedparams.Add(value.ParameterName,this.parameters.Count-1);
            sortedparamsint.Add(value.InternalParameterName, 
this.parameters.Count - 1);
IndexOf
         int idx = sortedparamsint.IndexOfKey(parameterName);
         if (idx == -1)
            idx = sortedparams.IndexOfKey(parameterName);
         return idx;

To detect parameter changes, in FbParameter:
                public override string ParameterName
                {
                        get { return this.parameterName; }
                        set { 
             this.parameterName = value;
             if (this.parent != null)
                this.Parent.RebuildSorted();
         }
                }

And define RebuildSorted in the FbParameterCollection
      internal void RebuildSorted()
      {
         sortedparams.Clear();
         sortedparamsint.Clear();
         for (int idx = 0;idx <parameters.Count;idx++)
         {
            sortedparams.Add(parameters[idx].ParameterName,idx);
            sortedparamsint.Add(parameters[idx].InternalParameterName,idx);
         }
      }



-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://tracker.firebirdsql.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

------------------------------------------------------------------------------
Shape the Mobile Experience: Free Subscription
Software experts and developers: Be at the forefront of tech innovation.
Intel(R) Software Adrenaline delivers strategic insight and game-changing 
conversations that shape the rapidly evolving mobile landscape. Sign up now. 
http://pubads.g.doubleclick.net/gampad/clk?id=63431311&iu=/4140/ostg.clktrk
_______________________________________________
Firebird-net-provider mailing list
Firebird-net-provider@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/firebird-net-provider

Reply via email to