1
0
Fork 0

Use enumerators Next instead of index, slight performance improvement.

This commit is contained in:
ZehMatt 2017-12-18 19:51:47 +01:00 committed by Duncan Ogilvie
parent 97fa3c1408
commit 7c6bfcd2c6
No known key found for this signature in database
GPG Key ID: FC89E0AAA0C1AAD8
1 changed files with 13 additions and 8 deletions

View File

@ -255,22 +255,27 @@ bool PDBDiaFile::getFunctionLineNumbers(DWORD rva, ULONGLONG size, uint64_t imag
DWORD relativeVirtualAddress = 0;
DWORD lineNumberEnd = 0;
ScopedDiaType<IDiaEnumLineNumbers> lineNumbers;
hr = m_session->findLinesByRVA(rva, static_cast<DWORD>(size), lineNumbers.ref());
ScopedDiaType<IDiaEnumLineNumbers> lineNumbersEnum;
hr = m_session->findLinesByRVA(rva, static_cast<DWORD>(size), lineNumbersEnum.ref());
if(!SUCCEEDED(hr))
return false;
LONG lineCount = 0;
hr = lineNumbers->get_Count(&lineCount);
hr = lineNumbersEnum->get_Count(&lineCount);
if(!SUCCEEDED(hr))
return false;
for(LONG n = 0; n < lineCount; n++)
if(lineCount == 0)
return true;
std::vector<IDiaLineNumber*> lineNumbers;
lineNumbers.resize(lineCount);
ULONG fetched = 0;
hr = lineNumbersEnum->Next(lineCount, lineNumbers.data(), &fetched);
for(LONG n = 0; n < fetched; n++)
{
ScopedDiaType<IDiaLineNumber> lineNumberInfo;
hr = lineNumbers->Item(n, lineNumberInfo.ref());
if(!SUCCEEDED(hr))
continue;
ScopedDiaType<IDiaLineNumber> lineNumberInfo(lineNumbers[n]);
ScopedDiaType<IDiaSourceFile> sourceFile;
hr = lineNumberInfo->get_sourceFile(sourceFile.ref());