Здравствуйте уважаемые любители железа!
В сети невозможно найти информацию о скорости конкретной модели USB Flash накопителя(в простонародии флешки). Причина секретности этой информации мне не известна.
Была разработана утилита для проведения тестирования флешки и отсылки результатов на сайт.
Приложение написанно на .NET Framework 2.0. Для низкоуровневых операций написан .dll модуль на C++.
Целью было оценить скорость чтения и записи на карточку блоков разных размеров. Для решения этой задачки я воспользовался WinAPI функциями: CreateFile, WriteFile и ReadFile. При создании файла устанавливался флажок FILE_FLAG_NO_BUFFERING, который указывает ОС, что не следует использовать всякого рода файловые кэши.
Вот так выглядит тест на запись блоков:
Буду очень признателен, если вы посмотрите мой проект UsbFlashSpeed.com и укажете на обнаруженные недостатки.
Это пост для предварительного тестирования сервиса и сбора критических замечаний! Анонс сервиса будет позже.
Проблема
В сети невозможно найти информацию о скорости конкретной модели USB Flash накопителя(в простонародии флешки). Причина секретности этой информации мне не известна.
Наше решение
Была разработана утилита для проведения тестирования флешки и отсылки результатов на сайт.
Бенчмарк
Приложение написанно на .NET Framework 2.0. Для низкоуровневых операций написан .dll модуль на C++.
Целью было оценить скорость чтения и записи на карточку блоков разных размеров. Для решения этой задачки я воспользовался WinAPI функциями: CreateFile, WriteFile и ReadFile. При создании файла устанавливался флажок FILE_FLAG_NO_BUFFERING, который указывает ОС, что не следует использовать всякого рода файловые кэши.
Вот так выглядит тест на запись блоков:
__declspec(dllexport) double WriteBench(LPCSTR path, long size, long count, char* ErrorMessage)
{
HRTimer timer; int i;
double elapsed;
HANDLE hFile; DWORD dwResult;
void* buffer = malloc(size);
memset(buffer, -1, size);
hFile = CreateFileA(path,
GENERIC_WRITE,
FILE_SHARE_WRITE,
NULL,
CREATE_ALWAYS,
FILE_FLAG_NO_BUFFERING,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
sprintf((char*)ErrorMessage, "Could not open file (error %d)\n", GetLastError());
return 0;
}
timer.StartTimer();
for (i =0 ; i< count; i++){
if(!WriteFile(hFile, buffer, size, &dwResult, NULL))
{
sprintf((char*)ErrorMessage, "Could not write to file (error %d)\n", GetLastError());
return 0;
}
}
elapsed = timer.StopTimer();
CloseHandle(hFile);
DeleteFileA(path);
free(buffer);
return elapsed;
}
* This source code was highlighted with Source Code Highlighter.
Буду очень признателен, если вы посмотрите мой проект UsbFlashSpeed.com и укажете на обнаруженные недостатки.
Это пост для предварительного тестирования сервиса и сбора критических замечаний! Анонс сервиса будет позже.