скорость записи на диск, цэ

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by sn0w, 2 Aug 2011.

  1. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,296
    Reputations:
    327
    чето занятся нехрен, набросал неск строк, прога проверяет скорость записи на диск. в идеале конечно следует открывать в сыром режиме и писать в свободное место, но и так пойдет.

    Code:
    // diskspeed.cpp : Defines the entry point for the application.
    //
    
    #include <stdio.h>
    #include <windows.h>
    
    DWORD g_written;
    
    //////////////////////////////////////////////////////////////////////////
    DWORD WINAPI TestThread(LPVOID lpHandle)
    {
    	char buffer[4096];
    	DWORD dwt;
    	
    	for(int i = 0; i < sizeof(buffer); i++)
    		buffer[i] = i & 0xff;
    
    	while(1)
    	{
    		if(!WriteFile((HANDLE)lpHandle, buffer, sizeof(buffer), &dwt, NULL))
    		{
    			MessageBox(NULL, _TEXT("IO error"), _TEXT("FAIL"), MB_ICONWARNING);
    			break;
    		}
    		g_written += dwt;
    	}
    
    	ExitThread(0);
    }
    
    //////////////////////////////////////////////////////////////////////////
    int APIENTRY _tWinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPTSTR    lpCmdLine,
                         int       nCmdShow)
    {
    
    	
    	HANDLE eThread;
    	HANDLE hTestF = CreateFile(_TEXT("rnd.bin"), GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, 0, NULL);
    
    	if(INVALID_HANDLE_VALUE == hTestF)
    	{
    		MessageBox(NULL, _TEXT("Error creating test file!"), _TEXT("Error!"), MB_ICONSTOP);
    		return -1;
    	}
    
    	MessageBox(NULL, _TEXT("Hit ok to test write speed!"), _TEXT("..."), MB_ICONINFORMATION);
    
    	DWORD ticks = GetTickCount();
    
    	g_written = 0;
    	eThread = CreateThread(NULL, 0, TestThread, (LPVOID)hTestF, 0, NULL);
    
    	if(WaitForSingleObject(eThread, 1000) == WAIT_TIMEOUT)
    	{
    		char	report[128];
    		DWORD	fsize;
    
    		//SuspendThread(eThread);
    		TerminateThread(eThread, 0);
    
    		ticks = GetTickCount() - ticks;
    		fsize = GetFileSize(hTestF, NULL);
    
    		CloseHandle(hTestF);
    		DeleteFile(_TEXT("rnd.bin"));
    
    		sprintf(report, "Average write speed is %4.3f MiB/sec; test time %d ms", ((float)(fsize))/1024/1024, ticks);
    		
    		MessageBoxA(NULL, report, "Benchmark completed", MB_ICONINFORMATION);
    	}
    	else	// non-timeout break, means that something comes wrong
    	{
    		CloseHandle(hTestF);
    		DeleteFile(_TEXT("rnd.bin"));
    		
    		MessageBox(NULL, _TEXT("Error during benchmarking"), _TEXT("Benchmark failed"), MB_ICONSTOP);
    	}
    	
    	return 0;
    }
    
     
  2. stickswirl

    stickswirl Banned

    Joined:
    1 Aug 2011
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    в чём вы такое пишите вообще.
    Что за макрос такой?
    Ещё мэйн - int APIENTRY _tWinMain
    Почему бы просто не написать int main? Студия не согласилась компилировать этот _tWinMain....

    Ну а так норм, забавная прожка :)
    [​IMG]
     
    #2 stickswirl, 2 Aug 2011
    Last edited: 3 Aug 2011
  3. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,296
    Reputations:
    327
    вообще эти макросы для юникода-анси совместимости. и прожект этот со студии.
    кстати у меня на сата2 выдает 450 мебибайт, что есть 3.6гигабита, хотя сата2 имеет потолок в 3 :D

    и еще - можно закомментить TerminateThread и раскомментить SuspendThread -сути это не изменит, но мозгоебли добавит немало))
     
  4. stickswirl

    stickswirl Banned

    Joined:
    1 Aug 2011
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    У меня на SSD просто диск C.
    А что у тебя за студия такая, с такими макросами?
    Например у меня Microsoft Visual Studio 2010 и там нет макроса _TEXT, но есть просто TEXT
     
  5. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,296
    Reputations:
    327
    ssd? так там во всю уже сата 3 вроде как, которая 6 гигабит...

    TEXT определен в winnt.h а _TEXT в tchar.h

    2010 студия обычная
     
    #5 sn0w, 3 Aug 2011
    Last edited: 3 Aug 2011
  6. stickswirl

    stickswirl Banned

    Joined:
    1 Aug 2011
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    сейчас ещё раз запустил, показывает в этот раз 497.691 MiB/Sec
    что не так там у тебя :)
     
  7. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,296
    Reputations:
    327
    тык правильно, его же зациклить раз на 5 надо) оО уже бан? стремительно =)