Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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# 如何在asp.net中将一个流对象值复制到第二个流对象_C#_Asp.net - Fatal编程技术网

C# 如何在asp.net中将一个流对象值复制到第二个流对象

C# 如何在asp.net中将一个流对象值复制到第二个流对象,c#,asp.net,C#,Asp.net,在我的项目中,用户可以上传高达1GB的文件。我想将上传的文件流数据复制到第二个流。 如果我像这样使用 int i; while ( ( i = fuVideo.FileContent.ReadByte() ) != -1 ) { strm.WriteByte((byte)i); } 那就要花很多时间 如果我试图通过字节数组来实现这一点,那么我需要在long中添加数组大小,这是无效的 如果有人有更好的想法,那么请让我知道 -- 嗨,凯普里,谢谢你。我尝试了Stream.Copy,但是将一个S

在我的项目中,用户可以上传高达1GB的文件。我想将上传的文件流数据复制到第二个流。 如果我像这样使用

int i;
while ( ( i = fuVideo.FileContent.ReadByte() ) != -1 )
{
  strm.WriteByte((byte)i);
}
那就要花很多时间

如果我试图通过字节数组来实现这一点,那么我需要在long中添加数组大小,这是无效的

如果有人有更好的想法,那么请让我知道

--

嗨,凯普里,谢谢你。我尝试了
Stream.Copy
,但是将一个Stream对象复制到第二个要花费很多时间

我尝试使用8.02Mb的文件,花了3到4分钟。 我添加的代码是

Stream fs = fuVideo.FileContent;  //fileInf.OpenRead();

Stream strm = ftp.GetRequestStream();
fs.CopyTo(strm);
如果我做错了什么,请告诉我。

这是.NET 4.0吗

如果是这样,那可能是你最好的选择

如果没有,并且要在值得表扬的地方给予表扬,请参阅“如果您不是.NET 4.0”中的答案。请确保阅读该线程中的注释,因为如果性能处于绝对溢价(这可能是您的情况),则有一些替代解决方案()可能值得研究

编辑:

根据更新,是否尝试将文件复制到其他远程目标?(基于GetRequestStream()[]进行猜测。时间将是文件内容实际传输到目标的时间。因此在本例中,当您执行fs.CopyTo(strm)时)它必须将这些字节从源流移动到远程服务器。这就是时间的来源。你实际上是在上传一个大文件。CopyTo将阻止你的处理,直到它完成为止

我建议您考虑将此类处理转移到另一个任务,或者至少考虑一下我列出的异步选项。您无法真正避免这需要花费大量时间。您受到文件大小和可用上载带宽的限制


我验证了在本地工作时,CopyTo的处理时间为亚秒。我使用半个gig文件进行了测试,一个快速秒表类返回的处理时间为800毫秒。

如果您不是.NET 4.0,请使用此选项

    static void CopyTo(Stream fromStream, Stream destination, int bufferSize)
    {
      int num;
      byte[] buffer = new byte[bufferSize];
      while ((num = fromStream.Read(buffer, 0, buffer.Length)) != 0)
      {
         destination.Write(buffer, 0, num);
      }
   }