2011-10-11 4 views
-1

ForEach의 성능을 향상시켜야합니다. 이 루프 내에서 ForEach 수행

//Pseudocode 
foreach (item i item in items) 
{ 
//Call service to open DB conn and get data 
} 

각 반복에 대한 그래서, 세션 SQLSERVER을 여는 데이터베이스에서 데이터를 가져 와서 세션을 종료하는 서비스로 전화를 걸. 내가 할 수있는 일은 무엇입니까?. 감사합니다. .

+2

응용 프로그램을 프로파일 링하여 루프가 실제로 병목 현상인지 확인할 수 있습니다. –

+1

병렬 처리가 도움이 될 것이라고 확신합니까? 데이터베이스 IO에서 병목 현상이 발생하여 병렬화로 인해 속도가 저하 될 것입니다. – spender

+0

예, 필자는 병렬 루프를 사용하거나 사용하지 않으려 고 시도했기 때문에 확실히 필요합니다. 문제는 Parallel의 기본 옵션으로 많이 걸린다는 것입니다. – mggSoft

답변

2

Parallel.ForEach을 완벽하게 사용하는 것처럼 들리므로 시도해 보셨습니까?

Parallel.ForEach(queries, query => { 
    // Perform query 
}); 

당신은 잘 병렬 처리 등의 수준의 주위에 옵션을 지정할 수 있습니다 - 당신이 원하는대로 연결 풀은 많은 연결을 지원해야합니다. 그리고 물론, 측정 후 이전과 이후의 성능이 실제로 도움이되는지 확인하십시오.

+0

동시 스레드 수를 의미합니까? 병렬 처리 수준을 어떻게 높일 수 있습니까? – mggSoft

+0

@MGG_Soft : 링크 된 문서를보고 'ParallelOptions' 매개 변수가 포함 된 오버로드를 찾으십시오. –

+0

질문 제목에 이미 없습니까? –

1

아마 당신은 각 반복에서 새 스레드를 시작할 수 : 물론

foreach (item i in collection) 
{ 
    Thread t = new Thread(functionToCall); 
    t.Start() 
} 

functionToCall() 
{ 
    database = openSQLSession(); 
    data databaseData = database.getData(); 
    dataCollection.Add(databaseData); 
    closeSQLSession(); 
} 

이 간단한 예제 꽤 의사-Y,하지만 난 당신이 그것의 요점을 얻을 희망?

+0

기억 하겠지만 개선하지는 않습니다. – mggSoft