Is there a way to improve the performance of the ORM mapper of Linq2Db using the FirebirdDataProvider
. I retrieve 1831 records from a table having 39 columns (all INTEGER
, DECIMAL(13,5)
and 2x VARCHAR(100)
). The longest varchar is 37 chars. Approximately 60% of all the values are null. I tried to log what takes so much time:
var sw = new System.Diagnostics.Stopwatch();
this.db.OnTraceConnection = (traceInfo) =>
{
switch (traceInfo.TraceInfoStep)
{
case TraceInfoStep.BeforeExecute:
sw.Start();
break;
case TraceInfoStep.AfterExecute:
Console.WriteLine($"DB Request Time: {sw.ElapsedMilliseconds} ms");
sw.Restart();
break;
case TraceInfoStep.Completed:
Console.WriteLine($"Mapping Time: {sw.ElapsedMilliseconds} ms");
break;
}
};
Here is the result:
DB Request Time: 49 ms
Mapping Time: 1805 ms
DB Request Time: 43 ms
Mapping Time: 1870 ms
DB Request Time: 47 ms
Mapping Time: 1653 ms
DB Request Time: 40 ms
Mapping Time: 1820 ms
PC Specs:
i7-13700K
64GB 4000MHz
Network should also not be the bottleneck. The last check I did resulted in 898.4 Mbit/s
I tried to use compiled queries but this did not improve the query at all:
DB Request Time: 45 ms
Mapping Time: 1953 ms
DB Request Time: 47 ms
Mapping Time: 1804 ms
DB Request Time: 48 ms
Mapping Time: 1832 ms
DB Request Time: 41 ms
Mapping Time: 1881 ms