2009-05-04 2 views
0

Outlook 2007에서 전자 메일을 구문 분석하려고합니다. 가능한 한 빨리 간소화해야하며 문제가있는 것 같습니다.Outlook 2007 MailItem 정보 - 천천히

은 기본적으로는 다음과 같습니다

foreach(Folder fld in outllookApp.Session.Folders) 
{ 
    foreach(MailItem mailItem in fld) 
    { 
     string body = mailItem.Body; 
    } 
} 

5000 전자 메일의 경우,이 100 초 동안 소요됩니다. 이 일이 오래 걸릴 것 같지 않은 것 같습니다.

내가 추가하는 경우 :

string entry = mailItem.EntryID; 

그것은 여분의 30 초되고 끝납니다.

나는이 문자열들을 가진 정규식과 데이터베이스에 쓰는 등 모든 종류의 문자열 조작을하고 있는데, 여전히이 두 줄은 내 런타임의 50 %를 차지합니다.

나는이 특정 문제를 해결한다면 나도 몰라 비주얼 스튜디오 2008

답변

1

각 항목에 대해 Exchange 스토어에서 데이터를 가져 오지 않으면이 작업을 수행하는 데 시간이 오래 걸릴 수 있습니다.

난 당신이 여기에 몇 가지 옵션이 ..

프로세스 다른 과정에서 밴드를 사용 CDO/RDO 중이 정보를 가지고 있다고 생각합니다. 또는 MapiTables를 사용하면 MapiTables가 속성을 얻는 가장 빠른 방법이므로이 경우에는주의해야하며, 사용자는 자신의 processin에서 테이블로 가져올 수있는 일을 할 수도 있습니다.

보너스 래퍼 - http://www.dimastr.com/redemption/mapitable.htm

MAPI 테이블 http://msdn.microsoft.com/en-us/library/cc842056.aspx

+0

추가 라이센스를 구입하지 않아도되기를 희망했지만 이것은 분명히 가능합니다. 감사! – McAden

+0

CDO는 무료 MS lib 등입니다. www.cdolive.com 위의 코드가 OOM처럼 보일 때 프로세스를 사용해야합니다. 교환을 위해 직접 연결하고 아이템에 대한 작업을합니다. – 76mel

+0

Ooh는 2007 년 Outlook 테이블이 있다는 것을 잊었습니다. 데이터를 가져 오는 가장 빠른 방법입니다. http://msdn.microsoft.com/en-us/library /bb147822.aspx string filter = ""; Outlook.Table inboxTable = inboxFolder.GetTable (filter, Outlook.OlTableContents.olUserItems); 필터를 사용하여 원하는 것을 선택하고 원하지 않는 필터를 선택하십시오. – 76mel

1

를 사용하고 있지만, 최신 Office 2007 서비스 팩이 메시지는 많은 수의 전망에 대한 synificant 성능 차이 (개선)했다.

+0

아, 1 주일 조금 전에 나왔습니다. 그것을 밖으로 시도. – McAden

+0

5-10 % 개선. 더 많은 것을 원했지만 그게 뭔가였습니다. 헤즈 업에 감사드립니다.메일 항목에 액세스 할 수있는 다른 방법이 필요했지만 Outlook의 I/O가이 메일에 바인딩되어있는 것처럼 보입니다. – McAden

0

이 루프에서 해당 문자열을 읽었습니까? 아니면 문자열을 읽고 처리하고 다음으로 넘어 가고 있습니까? 루프 내에서 HashTable에 모든 메시지를 읽은 다음로드 한 후에 처리 할 수 ​​있습니다. 그러면 몇 가지 이점을 얻을 수 있습니다.

모든 종류의 UI 업데이트는 매우 비쌉니다. 텍스트를 쓰거나 진행률 표시 줄을 늘리면 그렇게하지 않는 것이 가장 좋습니다.

+0

내가 뭘하려고하는지에 대한 분석과 처리를하고 있습니다. 그러나 질문은 단순히 위의 코드에 관한 것입니다. 순수 할당 (내 처리가 주석 처리 됨)은 대략 100-130 초가 걸립니다. 처리에는 190 초가 걸립니다. 이 모든 것이 백엔드입니다. – McAden

0

우리는 폴더가 로컬에 어떠한 네트워크 지연이 없었다 경우에도 정확히 같은 문제가 있었다.

우리는 필요한 검색을 위해 조정 된 로컬 Sql Server CE 테이블에 모든 전자 메일의 복사본을 저장하여 속도를 10 배 높였습니다. 또한 업데이트 이벤트를 사용하여 로컬 데이터베이스가 Outlook/Exchange 폴더와 동기화 상태를 유지하는지 확인했습니다.

사용자 지연을 완전히 없애기 위해 Outlook 스레드에서 검색을 가져 와서 자체 스레드에 넣었습니다. 후행에 대한 인식은 실제 지연보다 더 나빴습니다.

관련 문제