В C # (.NET 3.5) я заполнил DataTable строками из моей базы данных.В этой DataTable содержится от 100 до 200 DataRows.Я должен пройти через эту DataTable, чтобы проверить правильность данных, и я использую 27 методов проверки.Сначала я попытался передать DataTable каждому методу и зациклить его.Во второй попытке я зациклил DataTable один раз и передал DataRow каждому методу.После этого я сравнил эти два метода, и первый метод был быстрее второго?
Цикл DataTable 27 раз занимал 13 секунд.
Цикл DataTable 1 раз занимал 18 секунд.
Так что это объясняет?И какой действительно самый быстрый способ перебрать DataTable для проверки его данных?
Примечание: тест был запущен непосредственно перед тем, как я запустил методы проверки, чтобы исключить скорость соединения с базой данных.
Первый метод:
private void check()
{
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
checkStamnr();
checkVoornaam();
checkGebDatum();
...
sw.Stop();
sw.Reset();
}
private void checkStamnr()
{
foreach (DataRow dr in dtIdentificatieRecords.Rows)
{
if (dr["STAMNRVOL"] == null || dr["STAMNRVOL"].GetType() == typeof(DBNull) || dr["STAMNRVOL"].equals(""))
{
DatabankFout df = new DatabankFout("Stamnummer is leeg.");
listDBFouten.Add(df);
}
}
}
Второй метод
private void check()
{
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
foreach (DataRow dr in dtIdentificatieRecords.Rows)
{
checkStamnr(dr);
checkVoornaam(dr);
checkGebDatum(dr);
...
}
sw.Stop();
sw.Reset();
}
private void checkStamnr(DataRow dr)
{
if (dr["STAMNRVOL"] == null || dr["STAMNRVOL"].GetType() == typeof(DBNull) || dr["STAMNRVOL"].equals(""))
{
DatabankFout df = new DatabankFout("Stamnummer is leeg.");
listDBFouten.Add(df);
}
}
Класс DatabankFout по запросу:
public class DatabankFout
{
public DatabankFout(string reden, bool rood)
{
this.reden = reden;
this.rood = rood;
}
public DatabankFout(string reden) : this(reden, false)
{
}
public string reden { get; set; }
public bool rood { get; set; }
}