ForEach의 성능을 향상시켜야합니다. 이 루프 내에서 ForEach 수행
//Pseudocode
foreach (item i item in items)
{
//Call service to open DB conn and get data
}
각 반복에 대한 그래서, 세션 SQLSERVER을 여는 데이터베이스에서 데이터를 가져 와서 세션을 종료하는 서비스로 전화를 걸. 내가 할 수있는 일은 무엇입니까?. 감사합니다. .
ForEach의 성능을 향상시켜야합니다. 이 루프 내에서 ForEach 수행
//Pseudocode
foreach (item i item in items)
{
//Call service to open DB conn and get data
}
각 반복에 대한 그래서, 세션 SQLSERVER을 여는 데이터베이스에서 데이터를 가져 와서 세션을 종료하는 서비스로 전화를 걸. 내가 할 수있는 일은 무엇입니까?. 감사합니다. .
Parallel.ForEach
을 완벽하게 사용하는 것처럼 들리므로 시도해 보셨습니까?
Parallel.ForEach(queries, query => {
// Perform query
});
당신은 잘 병렬 처리 등의 수준의 주위에 옵션을 지정할 수 있습니다 - 당신이 원하는대로 연결 풀은 많은 연결을 지원해야합니다. 그리고 물론, 측정 후 이전과 이후의 성능이 실제로 도움이되는지 확인하십시오.
동시 스레드 수를 의미합니까? 병렬 처리 수준을 어떻게 높일 수 있습니까? – mggSoft
@MGG_Soft : 링크 된 문서를보고 'ParallelOptions' 매개 변수가 포함 된 오버로드를 찾으십시오. –
질문 제목에 이미 없습니까? –
아마 당신은 각 반복에서 새 스레드를 시작할 수 : 물론
foreach (item i in collection)
{
Thread t = new Thread(functionToCall);
t.Start()
}
functionToCall()
{
database = openSQLSession();
data databaseData = database.getData();
dataCollection.Add(databaseData);
closeSQLSession();
}
이 간단한 예제 꽤 의사-Y,하지만 난 당신이 그것의 요점을 얻을 희망?
기억 하겠지만 개선하지는 않습니다. – mggSoft
응용 프로그램을 프로파일 링하여 루프가 실제로 병목 현상인지 확인할 수 있습니다. –
병렬 처리가 도움이 될 것이라고 확신합니까? 데이터베이스 IO에서 병목 현상이 발생하여 병렬화로 인해 속도가 저하 될 것입니다. – spender
예, 필자는 병렬 루프를 사용하거나 사용하지 않으려 고 시도했기 때문에 확실히 필요합니다. 문제는 Parallel의 기본 옵션으로 많이 걸린다는 것입니다. – mggSoft