public void AddLogsToDatabase(int jobId, ICollection <LogItem> completeLog) { if (completeLog == null || completeLog.Count == 0) { return; } using (var table = new DataTable("ExportImportJobLogs")) { // must create the columns from scratch with each iteration table.Columns.AddRange(DatasetColumns.Select( column => new DataColumn(column.Item1, column.Item2)).ToArray()); // batch specific amount of record each time const int batchSize = 500; var toSkip = 0; while (toSkip < completeLog.Count) { foreach (var item in completeLog.Skip(toSkip).Take(batchSize)) { var row = table.NewRow(); row["JobId"] = jobId; row["Name"] = item.Name.TrimToLength(Constants.LogColumnLength); row["Value"] = item.Value.TrimToLength(Constants.LogColumnLength); row["Level"] = (int)item.ReportLevel; row["CreatedOnDate"] = item.CreatedOnDate; table.Rows.Add(row); } PlatformDataProvider.Instance().BulkInsert("ExportImportJobLogs_AddBulk", "@DataTable", table); toSkip += batchSize; table.Rows.Clear(); } } completeLog.Clear(); }