zoukankan      html  css  js  c++  java
  • Windows IO 性能简单测试

    转自:http://bbs.csdn.net/topics/360111289, 有改动。

    #include <windows.h>
    #include <stdio.h>
    #include <process.h>
    #include<memory>
    #pragma comment(lib,"ws2_32.lib")
    ULONGLONG g_nReadCounts=0,g_nWriteCounts=0,g_nOtherCounts=0,g_nReadsBytes=0,g_nWriteBytes=0,g_nOtherBytes=0;
    void PrintIODetails() 
    {
    	static DWORD lastTickCount;
    	static IO_COUNTERS lastIoCounters;
    	DWORD tickCount;
    	IO_COUNTERS ioCounters;
    	static int firstTime = 1;
    	tickCount = GetTickCount();
    	if (!GetProcessIoCounters(GetCurrentProcess(), &ioCounters)) {
    		return;
    	}
    	if (firstTime) 
    	{
    		firstTime = 0;
    		printf("    Time    Reads   Writes   Others     Read(Bytes)    Write(Bytes)    Other(Bytes)
    ");
    		printf("--------------------------------------------------------------------------------
    ");
    	}
    	else 
    	{
    		printf("%8lu%8llu%8llu%8llu%16llu%16llu%16llu
    ",
    			tickCount - lastTickCount,
    			ioCounters.ReadOperationCount - lastIoCounters.ReadOperationCount,
    			ioCounters.WriteOperationCount - lastIoCounters.WriteOperationCount,
    			ioCounters.OtherOperationCount - lastIoCounters.OtherOperationCount,
    			ioCounters.ReadTransferCount - lastIoCounters.ReadTransferCount,
    			ioCounters.WriteTransferCount - lastIoCounters.WriteTransferCount,
    			ioCounters.OtherTransferCount - lastIoCounters.OtherTransferCount
    			);
    		g_nReadCounts += (ioCounters.ReadOperationCount - lastIoCounters.ReadOperationCount);
    		g_nWriteCounts += (ioCounters.WriteOperationCount - lastIoCounters.WriteOperationCount);
    		g_nOtherCounts += (ioCounters.OtherOperationCount - lastIoCounters.OtherOperationCount);
    		g_nReadsBytes += (ioCounters.ReadTransferCount - lastIoCounters.ReadTransferCount);
    		g_nWriteBytes += (ioCounters.WriteTransferCount - lastIoCounters.WriteTransferCount);
    		g_nOtherBytes += (ioCounters.OtherTransferCount - lastIoCounters.OtherTransferCount);
    	}
    	lastTickCount = tickCount;
    	memcpy(&lastIoCounters, &ioCounters, sizeof(IO_COUNTERS));
    }
    #define PACKCOUNT 10
    #define BUFFSIEZ 50000
    volatile bool bWorkThreadFinish = false;
    void workerThread(void * dummy) 
    {
    	int i;
    	FILE * fp;
    	char buff[BUFFSIEZ];
    	WSADATA wsaData;
    	SOCKET s;
    	struct sockaddr_in localAddr;
    	struct sockaddr_in peerAddr;
    	memset(buff, 'X', sizeof(buff));
    	Sleep(2000);
    	// 写文件
    	fp = fopen("io.txt", "w");
    	if (fp) {
    		printf("fwrite = %d
    ", fwrite(buff, 1, sizeof(buff), fp));
    		Sleep(10000);
    		// 关闭文件,测试Flush
    		printf("fclose
    ");
    		fclose(fp);
    		Sleep(2000);
    	}
    	// 读文件
    	fp = fopen("io.txt", "r");
    	if (fp) {
    		printf("fread = %d
    ", fread(buff, 1, sizeof(buff), fp));
    		fclose(fp);
    		Sleep(2000);
    	}
    	// 网络发
    	memset((void *)&localAddr, 0, sizeof(localAddr));
    	localAddr.sin_family = AF_INET;
    	localAddr.sin_addr.s_addr = htonl(INADDR_ANY);
    	localAddr.sin_port = htons(0);
    	memset((void *)&peerAddr, 0, sizeof(peerAddr));
    	peerAddr.sin_family = AF_INET;
    	peerAddr.sin_addr.s_addr = inet_addr("10.19.85.1");
    	peerAddr.sin_port = htons(3389);
    	printf("WSAStartup
    ");
    	WSAStartup(MAKEWORD(2, 2), &wsaData);
    	Sleep(2000);
    	// UDP
    	printf("UDP Test:
    ");
    	printf("socket
    ");
    	s = socket(AF_INET, SOCK_DGRAM, 0);
    	Sleep(2000);
    	printf("bind
    ");
    	bind(s, (struct sockaddr *)&localAddr, sizeof(localAddr));
    	Sleep(2000);
    	for (i = 0; i < PACKCOUNT; i++) {
    		printf("sendto = %d
    ", sendto(s, buff, i * 100, 0, (SOCKADDR *) &peerAddr, sizeof(peerAddr)));
    		Sleep(2000);
    	}
    	printf("closesocket
    ");
    	closesocket(s);
    	Sleep(2000);
    	// TCP
    	printf("TCP Test:
    ");
    	printf("socket
    ");
    	s = socket(AF_INET, SOCK_STREAM, 0);
    	Sleep(2000);
    	printf("bind
    ");
    	bind(s, (struct sockaddr *)&localAddr, sizeof(localAddr));
    	Sleep(2000);
    	printf("connect
    ");
    	connect(s, (SOCKADDR *) &peerAddr, sizeof(peerAddr));
    	Sleep(2000);
    	printf("send = %d
    ", send(s, buff, sizeof(buff), 0));
    	Sleep(2000);
    	printf("closesocket
    ");
    	closesocket(s);
    	Sleep(2000);
    	printf("WSACleanup
    ");
    	WSACleanup();
    	bWorkThreadFinish = true;
    }
    UINT _stdcall ThreadProc(PVOID pv)
    {
    	workerThread(pv);
    	return 1;
    }
    //HANDLE g_hEvt = NULL;
    int main(int argc, char ** argv) 
    {
    	// 启动工作线程
    	::_beginthreadex(NULL,0,ThreadProc,NULL,0,0);
    	//g_hEvt = ::CreateEventW(NULL,FALSE,FALSE,NULL);
    	
    	printf("Ctrl-C to exit
    
    ");
    	for (;;) 
    	{
    		PrintIODetails();
    		Sleep(1000);
    		if (bWorkThreadFinish)
    		{
    			break;
    		}	
    	}
    	printf("*********************************Total*************************************
    ");
    	printf("    Reads   Writes   Others     Read(Bytes)    Write(Bytes)    Other(Bytes)
    ");
    	printf("%8llu%8llu%8llu%16llu%16llu%16llu
    ",
    		g_nReadCounts,
    		g_nWriteCounts,
    		g_nOtherCounts,
    		g_nReadsBytes,
    		g_nWriteBytes,
    		g_nOtherBytes
    		);
    	return 0;
    }
  • 相关阅读:
    url传递参数带 + ,解决办法
    操作系统——内存地址重定位
    算法——二分查找变形题
    Java——代码性能优化
    maven——添加插件和添加依赖有什么区别?
    JavaWeb——Servlet如何调用线程池中的线程?
    「ZJOI2016」小星星
    [十二省联考2019]字符串问题
    [十二省联考2019]春节十二响
    [十二省联考2019]异或粽子
  • 原文地址:https://www.cnblogs.com/qinfengxiaoyue/p/3712227.html
Copyright © 2011-2022 走看看