Hallo Zusammen,
ich habe ein Performance-Problem mit Reflection.
Folg. Ausgangslage:
Der Codeausschnitt kommt aus einer Klasse zum einlesen von CSV-Dateien direkt in Objekte. Über ein Attribut in der Model-Klasse wird festgelegt, welche Csv-Spalte in welche Property geschrieben wird.
Die Liste infos enthält die PropertyInfos der Properties, die mit dem CSV-Attribut behaftet sind.
Einzulesende Daten:
Zeilen >10.000
Spalten ca. 100
Dauer >3 Minuten dann abgebrochen.
Nach diversen Tests habe ich rausgefunden, dass folg. Codezeile für die langsame Ausführung des Programms verantwortlich ist:
item.SetValue(obj, row[ColName], null);
Die Variable infos enthält ca. 100 Werte (=100 Spalten in der CSV-Datei).
_ImportData.Rows.Count()=10.000
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| List<PropertyInfo> infos = CsvAttributedPropertyInfos(); List<TResult> _result = new List<TResult>();
foreach (DataRow row in _ImportData.Rows) { TResult obj = new TResult();
foreach (var item in infos) { foreach (string ColName in _relevanteCsvColumns) { item.SetValue(obj, row[ColName], null); } } _result.Add(obj); } |
Kann mir hier jemand weiterhelfen, bzw. sagen, wie ich das Performance-Problem lösen kann?
Gruß
Frank