Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为远程文件系统包装器实现读/写字节缓冲区的最佳方法是什么_C#_.net_Buffer_Onedrive_Dokan - Fatal编程技术网

C# 为远程文件系统包装器实现读/写字节缓冲区的最佳方法是什么

C# 为远程文件系统包装器实现读/写字节缓冲区的最佳方法是什么,c#,.net,buffer,onedrive,dokan,C#,.net,Buffer,Onedrive,Dokan,我正在考虑使用Dokan(用户模式文件系统助手库)围绕最近推出的新OneDrive API创建一个文件系统。我意识到现有的工具可以做到这一点,但我想尝试并制作一个优化版本,围绕该服务提供的只读媒体流,以便与Plex一起使用 我想尝试通过使用某种缓冲区来优化体验,缓冲区大小在20-50兆字节之间,如果用于访问OneDrive API的互联网连接是可变的,我还想从OneDrive并行下载数据块,以最大限度地提高连接带宽,那么这将使整个体验更加顺畅 所有这一切都意味着,当Dokan从驻留在OneDri

我正在考虑使用Dokan(用户模式文件系统助手库)围绕最近推出的新OneDrive API创建一个文件系统。我意识到现有的工具可以做到这一点,但我想尝试并制作一个优化版本,围绕该服务提供的只读媒体流,以便与Plex一起使用

我想尝试通过使用某种缓冲区来优化体验,缓冲区大小在20-50兆字节之间,如果用于访问OneDrive API的互联网连接是可变的,我还想从OneDrive并行下载数据块,以最大限度地提高连接带宽,那么这将使整个体验更加顺畅

所有这一切都意味着,当Dokan从驻留在OneDrive上的文件请求字节时,它将基本上从该缓冲区中读取,而我同时将其写入,来自并行段的数据中的间隙可能没有按顺序完成,我不确定这样做的最有效方式是什么

我认为最简单的方法是分配一个大字节数组,开始填充,然后Dokan从中读取数据时,将Buffer.BlockCopy复制到一个新数组,基本上丢弃读取的数据,并在最后留出空间,以便下载和填充更多数据。然后,当整个文件流式传输时,此过程将尝试将缓冲区保持在其最大大小,消费者会觉得它是本地文件

连续块复制这样一个大字节数组会是一种可怕的方法吗?在.NET中有没有一种既定的模式可以更容易地实现这样的功能?我已经研究了几个小时,但找不到任何例子,试图做同样的事情,我是,即使我认为这将是非常普遍的


我们将非常感谢您提出的任何建议或示例,谢谢

我认为最好使用
MemoryStream
,只向流中写入数据,而不是复制字节数组。