Sto scrivendo un programma per un'azienda che genererà un rapporto giornaliero per loro. Tutti i dati che utilizzano per questo report sono archiviati in un database SQLite locale. Per questo report, si utilizza praticamente ogni bit delle informazioni nel database. Pertanto, al momento, quando interrogo il data base, recupero tutto e memorizzo le informazioni negli elenchi. Ecco cosa ho:
using (var dataReader = _connection.Select(query))
{
if (dataReader.HasRows)
{
while (dataReader.Read())
{
_date.Add(Convert.ToDateTime(dataReader["date"]));
_measured.Add(Convert.ToDouble(dataReader["measured_dist"]));
_bit.Add(Convert.ToDouble(dataReader["bit_loc"]));
_psi.Add(Convert.ToDouble(dataReader["pump_press"]));
_time.Add(Convert.ToDateTime(dataReader["timestamp"]));
_fob.Add(Convert.ToDouble(dataReader["force_on_bit"]));
_torque.Add(Convert.ToDouble(dataReader["torque"]));
_rpm.Add(Convert.ToDouble(dataReader["rpm"]));
_pumpOneSpm.Add(Convert.ToDouble(dataReader["pump_1_strokes_pm"]));
_pumpTwoSpm.Add(Convert.ToDouble(dataReader["pump_2_strokes_pm"]));
_pullForce.Add(Convert.ToDouble(dataReader["pull_force"]));
_gpm.Add(Convert.ToDouble(dataReader["flow"]));
}
}
}
Quindi utilizzo questi elenchi per i calcoli. Ovviamente, più informazioni sono presenti in questo database, più lunga sarà la query iniziale. Sono curioso di sapere se esiste un modo per aumentare le prestazioni della query? Grazie per qualsiasi aiuto.
Modifica
Una delle righe del rapporto è chiamata Ore giornaliere di perforazione. Per questo calcolo, utilizzo questo metodo:
// Retrieves the timestamps where measured depth == bit depth and PSI >= 50
public double CalculateDailyProjectDrillingHours(DateTime date)
{
var dailyTimeStamps = _time.Where((t, i) => _date[i].Equals(date) &&
_measured[i].Equals(_bit[i]) &&
_psi[i] >= 50).ToList();
return
_dailyDrillingHours =
Convert.ToDouble(Math.Round(TimeCalculations(dailyTimeStamps).TotalHours, 2, MidpointRounding.AwayFromZero));
}
// Checks that the interval is less than 10, then adds the interval to the total time
private static TimeSpan TimeCalculations(IList<DateTime> timeStamps)
{
var interval = new TimeSpan(0, 0, 10);
var totalTime = new TimeSpan();
TimeSpan timeDifference;
for (var j = 0; j < timeStamps.Count - 1; j++)
{
if (timeStamps[j + 1].Subtract(timeStamps[j]) <= interval)
{
timeDifference = timeStamps[j + 1].Subtract(timeStamps[j]);
totalTime = totalTime.Add(timeDifference);
}
}
return totalTime;
}