浅析delphi实现iocp后的优化

浅析delphi实现iocp后的优化

ID:19401154

大小:28.00 KB

页数:10页

时间:2018-10-01

浅析delphi实现iocp后的优化_第1页
浅析delphi实现iocp后的优化_第2页
浅析delphi实现iocp后的优化_第3页
浅析delphi实现iocp后的优化_第4页
浅析delphi实现iocp后的优化_第5页
资源描述:

《浅析delphi实现iocp后的优化》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、【转】浅析Delphi实现IOCP后的优化在我的BLOG中有几篇文章是关于如何用DLEPHI来实现IOCP,详见我的BLOG《DELPHI中完成端口(IOCP)的简单分析》。在这几篇文章中介绍了如何编写一个简单的IOCP的方法。最近我重新对这些文章中的一些BUG和效率低下的部分做了修正(其实相当于重新编写),通过几个不同的途径对IOCP进行了实现。下面我就来说一下我对以前代码的优化方法。1:结构定义部分。首先我们必须定义一个IO数据结构,在我的BLOG中我当时是这样定义的。(1):单IO数据结构  LPVOID=Pointer;  LPPER_IO

2、_OPERATION_DATA=^PER_IO_OPERATION_DATA;  PER_IO_OPERATION_DATA=packedrecord  Overlapped:OVERLAPPED;  DataBuf:TWSABUF;  Buffer:array[0..1024]ofCHAR;  BytesSEND:DWORD;  BytesRECV:DWORD;  end;和一个(2):“单句柄数据结构”  LPPER_HANDLE_DATA=^PER_HANDLE_DATA;  PER_HANDLE_DATA=packedrecord  Soc

3、ket:TSocket;  end;其实为什么我们不能将他们进行合并定义成一个结构呢?  //IO结构  PIOData=^TIOData;  TIOData=record  Overlapped:OVERLAPPED;  DataBuf:TWSABUF;  Socket:TSocket;                //套接字  OperationType:TOperation;          //操作类型  BufferLen:Integer;             5.1-9,,services,andmakethecitymorea

4、ttractive,strengtheningpublictransportinvestment,establishedasthebackboneoftheurbanrailtransitmulti-level,multi-functionalpublictransportsystem,thusprotectingtheregionalpositionandachieve   //数据长度  Buffer:array[0..DATA_BUFSIZE-1]ofchar;  //数据信息,包括数据头信息  end;这种结构当我们调用GetQueuedC

5、ompletionStatus函数的时候,用该函数的第4个参数来返回这个结构,这样一来我们就不用定义2个结构来处理不知道大家是否还记得在我的BLOG中关于粘包的文章(我们暂且不说它是否应该叫这个名字)。关于粘包的造成原理我这里就不讲述了,如有需要可以参看我的BLOG。这里只是说明一下,粘包的处理是我们将通过IOCP得到的数据,和这个套接字上次处理并剩余的数据合并在一起,看新合并后的数据包中是否包含一个完整的数据结构,如果包含则进行相关处理,并将处理后的剩余数据进行再次判断,反复如此。一般我们会将这个合并的数据放在一个TList链表中,有的时候为了加

6、快它的查找速度,我们会将它放在一个HASH表中,以套接字做为KEY。自然放在HASH表中的速度要比放在单纯的链表中快一些。可是我们有没有想过直接放在上面的这个IO结构中呢?也就是说将粘包处理的数组放在IO结构中,这样当GetQueuedCompletionStatus返回的时候就会直接将数据进行粘包处理,又可以免去一次的数据查找过程。这样一来,上面的数据结构就变成了:  //IO结构  PIOData=^TIOData;  TIOData=record  Overlapped:OVERLAPPED;  DataBuf:TWSABUF;  Socke

7、t:TSocket;                //套接字  OperationType:TOperation;          //操作类型  BufferLen:Integer;                //数据长度  Buffer:array[0..DATA_BUFSIZE-1]ofchar;  //数据信息,包括数据头信息  SpareBuffer:array[0..2*DATA_BUFSIZE-1]ofchar;  //处理粘包数组  SpareBufferlen:Integer;                 5.1-9,

8、,services,andmakethecitymoreattractive,strengtheningpublictra

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。