zoukankan      html  css  js  c++  java
  • 今天做了一个很糟糕的storage and buffer manager

    初步分析是LRE-2算法的问题,

    while(pt->less_recent != NULL && b > pt->less_recent->b2dist)
    这步判断耗时较多。。必须要修改。。。暂时无解。。
    void BMgr::LRU2(BCB * ptr, int frid)
    {
        if(mru == NULL)
      {
        mru = new LRUEle();
        mru->fid = frid;
        mru->less_recent = NULL;
        mru->more_recent = NULL;
        if(ptr->stime != -1)
        {
          mru->b2dist = (ptr->stime-ptr->ftime);
    
        }
        else
        {
          mru->b2dist = -1;
        }
        lru = mru;  
      }
    
      else
      {
    
        double b = 0.0;
        if(ptr->stime != -1)
        {
          b = ptr->stime - ptr->ftime;
        }
    
        else
        {
          b = -1;
        }
        LRUEle * pt = mru;
    
        if(b == -1)
        {
    
          while(pt->less_recent != NULL && pt->less_recent->b2dist != -1)
          {
            pt = pt->less_recent;
          }
    
          if(pt->less_recent == NULL)
          {
    
            pt->less_recent = new LRUEle();
            pt->less_recent->more_recent = pt;
            pt = pt->less_recent;
            pt->fid = frid;
            pt->less_recent = NULL;
            pt->b2dist = b;
    
            lru = pt;
          }
    
          else
          {
    
            LRUEle * temp = new LRUEle();
            temp->fid = frid;
            temp->b2dist = b;
            temp->less_recent = pt->less_recent;
            temp->more_recent = pt;
    
            pt->less_recent->more_recent = temp;
            pt->less_recent = temp;
          }
        }
    
        else
        {
    
          while(pt->less_recent != NULL && b > pt->less_recent->b2dist)
          {
            pt = pt->less_recent;
          }
    
          if(pt->less_recent == NULL)
          {
    
            pt->less_recent = new LRUEle();
            pt->less_recent->more_recent = pt;
            pt = pt->less_recent;
            pt->b2dist = b;
            pt->fid = frid;
            pt->less_recent = NULL;
    
            lru = pt;
          }
    
          else
          {
    
            LRUEle * temp = new LRUEle();
            temp->b2dist = b;
            temp->fid = frid;
            temp->less_recent = pt->less_recent;
            temp->more_recent = pt;
    
            pt->less_recent->more_recent = temp;
            pt->less_recent = temp;
          }
        }
      }
    }
  • 相关阅读:
    HttpService与WebService的差异
    在oracle中varchar和varchar2有什么区别?
    物联网项目的思考
    配置JDK-Java运行环境
    浅谈DDD
    参数化SQL语句
    OneNote无法同时设置中英文字体设置解决办法
    Oracle OCI-22053:溢出错误解决方法
    oracle 日期格式
    Visual Studio 2017各版本安装包离线下载
  • 原文地址:https://www.cnblogs.com/akira90/p/2761083.html
Copyright © 2011-2022 走看看