使用内存数据库/数据集以提高执行速度

来源:互联网 发布:数据存储的方式 编辑:程序博客网 时间:2024/05/21 22:31


http://wiki.lazarus.freepascal.org/How_to_write_in-memory_database_applications_in_Lazarus/FPC#TBufDataSet


如果你需要一个快速、单用户,无需事务管理,那就用MemDataset。

一些好处:

  • 快速。因为都是在内存中干活,除非明确要求,数据不会与保存到硬盘。
  • 无需外部dll文件,不需要服务器安装。
  • 代码适合多平台。
  • 容易维护。

加载csv文件:

procedure LoadFromCsv(DataSet:TDataSet);var  vFieldCount:Integer;  I:Integer;begin  try    //Assign SdfDataSetTemporary    with SdfDataSetTemporary do begin      Active:=False;      ClearFields;      FileName:=DataSet.Name+'.txt';      FirstLineAsSchema:=True;      Active:=True;      //Determine number of fields      vFieldCount:=FieldDefs.Count;    end;    //Iterate through SdfDataSetTemporary and insert records into MemDataSet    SdfDataSetTemporary.First;    while not SdfDataSetTemporary.EOF do begin      DataSet.Append;      //Iterate through FieldDefs      for I:=0 to vFieldCount-1 do begin        try          DataSet.Fields[I].Value:=SdfDataSetTemporary.Fields[I].Value;        except          on E:Exception do begin            MemoMessages.Append(TimeToStr(Now())+' Error while setting value for field: '             +DataSet.Name+'.'+DataSet.Fields[I].Name +'. '+E.Message);          end;        end;      end;      try        DataSet.Post;      except        on E:Exception do begin          MemoMessages.Append(TimeToStr(Now())+' Error while posting record to table: '           +DataSet.Name+'.'+E.Message);        end;      end;      SdfDataSetTemporary.Next;    end;  finally    SdfDataSetTemporary.Active:=False;    SdfDataSetTemporary.ClearFields;  end;end;


0 0
原创粉丝点击