Я имеюбыстрый способ для поиска строки в большой CSV-файл C#
- DataTable (столбцы AccId и TerrName), который содержит более 2000 строк.
- большой файл csv (столбцы AccId и External_ID), содержащие более 6 миллионов записей.
Теперь мне нужно сопоставить AccId и найти его соответствующий External_ID из файла csv.
В настоящее время я его достижения, используя ниже код:
DataTable tblATL = Util.GetTable("ATL", false);
tblATL.Columns.Add("External_ID");
DataTable tbl = Util.CsvToTable("TT.csv", true);
foreach (DataRow columnRow in tblATL.Rows)
{
var query = tbl.Rows.Cast<DataRow>().FirstOrDefault(x => x.Field<string>("AccId") == columnRow["AccId"].ToString());
if (query != null)
{
columnRow["External_ID"] = query.Field<string>("External_ID");
}
else
{
columnRow["External_ID"] = "New";
}
}
Этот код работает хорошо, но только проблема является проблемой производительности, его принимать очень и очень много времени, чтобы получить результат.
Пожалуйста, помогите. Как я могу улучшить свою производительность, есть ли у вас какой-либо другой подход?
Можете ли вы привести примеры заголовков файла csv? например, имена полей, их порядок/тип и т. д. (хранение записей 6M в памяти всегда будет медленнее) – BugFinder
Если вы загружаете весь файл csv в память, PLinq всегда является опцией. – Sidewinder94
@BugFinder: все столбцы имеют строковый тип без определенного порядка. AccId, External_ID 001P000000eHknBIAS, 303363IN 001U000001bU0Q6IAK, 303063IN – Avijit