Re[2]: Можно ли ускорить подсчет?
От: Аноним  
Дата: 24.07.05 09:36
Оценка:
Здравствуйте, Сергей, Вы писали:

С>Здравствуйте, Аноним, Вы писали:


А>>Так вот вопрос, можно ли как-нить ускорить процесс подсчёта, а то мой пример работает примерно сек 15-20?


С>Я думаю, более эффективный способ — отображаемые на память файлы. Под виндой ищите информацию о CreateFileMapping/MapViewOfFile, под linux — mmap.


Попробовал, но сразу встал в ступор. Как загнать из памяти данные в мой вектор строк?

int FirstWay(std::string FileName)
{
    int nResult = -1;
    HANDLE hFile = INVALID_HANDLE_VALUE;
    HANDLE hFileMap = NULL;
    PVOID pvFile = NULL;

    __try
    {
        hFile = CreateFile(FileName.c_str(), GENERIC_WRITE|GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
        if(hFile == INVALID_HANDLE_VALUE)
        {
            std::cout << "File could not be opened." << std::endl;
            __leave;
        }

        DWORD dwFileSize = GetFileSize(hFile, NULL);
        hFileMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, dwFileSize + sizeof(char), NULL);        
        if(!hFileMap)
        {
            std::cout << "File map could not be opened." << std::endl;
            __leave;
        }
        
        pvFile = MapViewOfFile(hFileMap, FILE_MAP_WRITE, 0, 0, 0);        
        if(!pvFile)
        {
            std::cout << "Could not map view of file." << std::endl;
            __leave;
        }

        // !!!! Как загнать данные из pvFile в мой вектор????
        std::vector<std::string> MyVector;

    }
    __finally
    {
        if(pvFile)
        {
            UnmapViewOfFile(pvFile);
            pvFile = NULL;
        }

        if(hFileMap)
        {
            CloseHandle(hFileMap);
            hFileMap = NULL;
        }

        if(hFile != INVALID_HANDLE_VALUE)
        {
            CloseHandle(hFile);
            hFile = NULL;
        }
    }

    return nResult;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.