Здравствуйте, Сергей, Вы писали:
С>Здравствуйте, Аноним, Вы писали:
А>>Так вот вопрос, можно ли как-нить ускорить процесс подсчёта, а то мой пример работает примерно сек 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;
}