《算法》计算最佳缓冲区大小

本文探讨了如何通过优化算法减少I/O操作,尤其是使用缓冲区来提高性能。重点介绍了Win32API函数QueryPerformanceFrequency(),用于获取硬件计数器频率,帮助精确测量算法运行时间。实验结果显示,缓冲区大小设为1024时已达到最优性能,进一步增大缓冲区并不会提升性能。
摘要由CSDN通过智能技术生成

前言

对算法进行改进以求获得最佳的性能通常有两种策略:优化现有的算法,或者开发新的算法。

优化算法的标准技术:
1、使I/O减到最少,减少函数调用的次数,限制计算密集型操作(浮点数运算和除法运算);
2、确定执行得最频繁的算法元素,比如冒泡排序的比较和交换;
3、检查可能由于疏忽导致而导致特别缓慢的的实现。这往往与查找最坏情况相似。

I/O通常是发生在毫秒(ms)级的时间范围内,而CPU的活动一般发生在亚微秒级的范围内。因此对于算法而言,任何I/O的代价都非常高昂。
如果不能消除I/O本身,那么可以使用缓冲区来减小它的影响。

代码

下面的一个算法,就是用来测试从输入文件流infile向输出文件流outfile传输时,多少大小的缓冲区buf最合适(既可以速度达到最快,也不浪费存储空间)

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <Windows.h>

#undef CopyFile//取消以前定义的CopyFile(下面有重写的CopyFile())  
#pragma comment(lib, "kernel32.lib")//yyw  

#define DEF_BUF 512  

long GetCPUTime() 
{
    static LARGE_INTEGER li = {
  0};  //静态变量~~初始化一次
    LARGE_INTEGER linow = {
  0};

    if ( 0 == li.QuadPart)
    {
        QueryPerformanceFrequency(&li);
    }
    QueryPerformanceCounter(&linow);

    return linow.QuadPart*1000/li.QuadPart;
}

#define get_clock_ticks(x) \
    x = GetCPUTime()

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值