FileVersionInfo 문자열을 수집해야하는 공유에 약 1500 개의 파일이 있습니다. 그래서 나는 이런 내 게이트웨이의 static 메소드 생성이 같은 DegreeOfParallelism과 PLINQ 전화에TPL - 정적 메서드와 구조체 메서드 사용
private static string GetVersionInfo(string filepath)
{
FileVersionInfo verInfo = FileVersionInfo.GetVersionInfo(filepath);
return string.Format("{0}.{1}.{2}.{3}", verInfo.ProductMajorPart, verInfo.ProductMinorPart,
verInfo.ProductBuildPart, verInfo.ProductPrivatePart).Trim();
}
그리고 사용 FileAndVersion 구조체를, I/O 관련
resultList = dllFilesRows.AsParallel().WithDegreeOfParallelism(20)
.Select(r =>
{
var symbolPath = r.Filename;
return new FilenameAndVersion{Filename=symbolPath, Version=GetVersionInfo(symbolPath)};
})
.ToArray();
나중에 내가 구조체 수정
private struct FilenameAndVersion
{
private string _version, _filename;
public string Version { get { return _version; } }
public string Filename { get { return _filename; } }
private void SetVersion()
{
FileVersionInfo verInfo = FileVersionInfo.GetVersionInfo(this.Filename);
this._version = string.Format("{0}.{1}.{2}.{3}", verInfo.ProductMajorPart, verInfo.ProductMinorPart,
verInfo.ProductBuildPart, verInfo.ProductPrivatePart).Trim();
}
public FilenameAndVersion(string filename, string version)
{
this._filename = filename;
this._version = string.Empty;
SetVersion();
}
}
그리고 그것을 사용 : FileAndVersion로
resultList = dllFilesRows.AsParallel().WithDegreeOfParallelism(20)
.Select(r =>
{
var symbolPath = r.Filename;
return new FilenameAndVersion(symbolPath, String.Empty);
})
.ToArray();
질문은 어쨌든 나를 돕기 위해 사용되는 좋은 패턴입니까? 파일이 SAN에 연결된 RAID 10이있는 서버에 있다는 사실을 잊어 버렸습니다. TPL (또는 병렬 어떤 형태)를 사용하여 Sunit
파일이 SAN이 연결된 FileServer에 있습니다. – Sunit
@Sunit : 내가 말한 것은 여전히 사실 일 수 있습니다. 귀하의 네트워크 파이프가 제한되어 있으므로 병렬 vs 순차가 무차별 차별화를하지 못하고 네트워크 속도에 구속을받습니다. 알아야 할 유일한 방법은 벤치마킹/프로파일 링하는 것입니다. 나는 그 시간에 네트워크/샌프란시드에 크게 의존하고있는 것 같아 피크 시간대와 오프 피크 시간대에 테스트를 실행합니다.당신은 단지 GUI 또는 다른 작업을 위해 CPU를 네트워크를 기다리는 최대 무료 동안 대부분 유휴 상태 일 것이다 단지 1 백그라운드 스레드에서이 모든 많이 넣어 더 낫다 사실을 발견했습니다. –
그래, 난 이미 VS2010 도구를 사용하여 프로파일했다. 우리의 경우, 10RAID/1 기가비트 네트워크와 SAN이 동기화 IO 대 TPL을 사용하여 더 나은 결과를 제공하고 취급이 된 것으로 보인다. 그래서 지금 우리는 그 길을 가기로 결정했다. – Sunit