에 null 참조 오류를 database.Before 업로드로 데이터를 업로드 할 수있는 요구 사항을 던지고, 그것은 세 가지 과정에 참여C#을 병렬 프로그래밍, Parallel.for 내가 programming.I 병렬 새로운 오전 Epplus
1.Data 유효성을 검사해야합니다.
2. 목록으로 변환해야합니다. 3.Finally이 그래서 병렬 programming.Validation 사용이 절차 다른 Type.ie 매핑
에 변환된다
별도의 방법을 가지고 우리 list.This 검증에 엑셀 변환하기위한 별도의 방법이 메서드는 Converting 메서드에서 호출됩니다.이 프로세스는 Concurrently.it가 정상적으로 for 루프에서 작동합니다. 그러나 Parallel.for에서는 없습니다. 동일한 파일의 경우 유효성 검사가 성공적으로 수행되고 경우에 따라
개체 참조가 개체의 인스턴스로 설정되지 않음
이 오류는 유효성 검사 방법에서만 발생합니다. 데이터를 사용할 수 있기 때문에입니다. 제가
병렬 코드Parallel.For(2, BelieversWorkSheet.Dimension.End.Row, new ParallelOptions { MaxDegreeOfParallelism = BelieversWorkSheet.Dimension.End.Row },rowIterator =>
{
var BelieverCSVs = new BelieversSignupUploadDetails();
if (!string.IsNullOrWhiteSpace(BelieversWorkSheet.Cells[rowIterator, 1]?.Value?.ToString()) || !string.IsNullOrWhiteSpace(BelieversWorkSheet.Cells[rowIterator, 2]?.Value?.ToString()) || !string.IsNullOrWhiteSpace(BelieversWorkSheet.Cells[rowIterator, 3]?.Value?.ToString()) || !string.IsNullOrWhiteSpace(BelieversWorkSheet.Cells[rowIterator, 4]?.Value?.ToString()))
{
var SingeRowValidationSummary = RequiredValidationForARow(BelieversWorkSheet.Cells[rowIterator, 1, rowIterator, 4], rowIterator, BelieversWorkSheet);//Validating Method is called
if (SingeRowValidationSummary.Count==0|| SingeRowValidationSummary==null)//add && decimal.TryParse(BelieversWorkSheet.ToString(), out Stand) && decimal.TryParse(E.ToString(), out Express)
{
BelieverCSVs.FirstName = BelieversWorkSheet.Cells[rowIterator, 1].Value.ToString();
BelieverCSVs.MiddleName = BelieversWorkSheet.Cells[rowIterator, 2].Value.ToString();
BelieverCSVs.LastName = BelieversWorkSheet.Cells[rowIterator, 3].Value.ToString();
BelieverCSVs.DOB = DateTime.Parse(BelieversWorkSheet.Cells[rowIterator, 4].Value.ToString());
Believers.Add(BelieverCSVs);
}
else
{
ValidationSummaryForSingle.AddRange(SingeRowValidationSummary);
}
}
});
이 아래
다음은 오류가 발생한 검증 방법.
private List<string> RequiredValidationForARow(ExcelRangeBase CurrentRow,int rowstart,ExcelWorksheet IndexFind)
{
List<string> ValidationMessage=new List<string>();
Regex regex = new Regex(@"^(?!\.)(""([^""\r\\]|\\[""\r\\])*""|"+ @"([-a-z0-9!#$%&'*+/=?^_`{|}~]|(?<!\.)\.)*)(?<!\.)"+ @"@[a-z0-9][\w\.-]*[a-z0-9]\.[a-z][a-z\.]*[a-z]$");
if (string.IsNullOrWhiteSpace(((object[,])CurrentRow?.Value)[0, 0]?.ToString()))
ValidationMessage.Add("First Name in row\t"+ IndexFind.Cells[rowstart, 1].ToString() +" is Missing");
if (string.IsNullOrWhiteSpace(((object[,])CurrentRow?.Value)[0, 2]?.ToString()))
ValidationMessage.Add("Last Name in row\t"+ IndexFind.Cells[rowstart, 3].ToString()+" is Missing");
if (string.IsNullOrWhiteSpace(((object[,])CurrentRow?.Value)[0, 5]?.ToString()))
ValidationMessage.Add("Primary Email in row \t" + IndexFind.Cells[rowstart, 4].ToString() + " is Missing");
else
if (!regex.IsMatch(((object[,])CurrentRow?.Value)[0, 4]?.ToString()))
ValidationMessage.Add("Primary Email in row \t" + IndexFind.Cells[rowstart, 4].ToString() + " is invalid");
return ValidationMessage;
}
주 -이 오류는 4 시간 동안이 오류를 보여주는, 내가 동일한 데이터를 10 번 같은 파일을 업로드 할 수 트링하고 모든 해물이다오고되지
수있는이
에 하나 도움미리 감사드립니다.
먼저 자신에게 물어 봐야 할 것이 있습니다. 실제로 이것을 평행으로 만들어야합니까? 일반 for 루프의 성능은 어떻습니까? – Magnus
내일 1000 개 이상의 레코드를 업로드하려는 경우. 유효성 검증을 수행하는 데 오랜 시간을 기다려서는 안됩니다. 따라서 병렬 프로그래밍이 좋은 선택이며 처리가 줄어 듭니다. – Harish