如何跟踪乱序的单个对象,然后连续加入()连续的对象?

我首先要说的是比一起盲目加入byte[]要困难一些。

我的主要目标是优化当前将许多512字节页面上传到Web服务器(Azure页面Blob)的应用程序,并将其减少为4Megs或更少的单个大型上载。 有关原因的更多背景信息,请参阅此问题底部的链接。

简要回答原因:通过使用Azure稀疏文件,此优化将提高速度(更少的IO)并节省长期资金

现在详细说明:

该课程需要

  • 接受数据并存储它(数据定义为alignment startalignment stop和随附的有效负载。

  • 在N个数据到达或发生eventProcessData() 。 这意味着是时候根据边界组装数据了( blob1的停止值必须与blob1对齐)

  • 连续数据实际上可能无序到达。

  • 非连续数据定义为在调用processData()之前调用应用程序未发送它时。 此外,如果整个512字节范围==零,那么它将获得特殊处理,并被视为非连续。

  • 我们正在处理byte []的类型,因此这里有效的列表可能很复杂。 我想避免不必要的副本和数组的扩展。

合理? (像泥,我希望不是)

到目前为止我最接近的是编写方法签名:(我知道很蹩脚)

 // This can't be bigger than 4Mb, or smaller than 512 byte[] BigBlobToUpload = new byte[]; ///  /// Collects consecutive data ranges that will be uploaded ///  /// The name of the target (unique per host) /// The data to be collected, in 512K multiples /// The "start point" or offset of the data stored in range to be included. Almost always 0. /// The length, or end of the range to include. Almost always 512. /// The location this data should be placed in the BigBlobToUpload global var for eventual upload private void AddToQueue(string NameOfTarget, byte[] range, int offsetToTransfer, int sizeToTransfer, int cloudOffset) { } 

我只需要有人给我指导如何有效地跟踪这些事情……我可以从那里处理它。 即使是抽象的方向也会有帮助

是否有人能够让我按照正确的概念方向进行跟踪,并有条件地加入连续的数据范围?

更不用说我正在尝试使用只扩展的高效逻辑,或者在需要时复制数组。