You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TiffBitmapEncoder Save(Stream)保存至网络共享速度过慢问题咨询

问题分析与解决方案

直接通过TiffBitmapEncoder.Save写入网络共享路径确实是不合理的方案,建议先保存到本地临时文件,再复制到目标网络共享。

为什么直接存网络这么慢?

TiffBitmapEncoder的Save方法在编码TIFF时,会以极小的块大小向流中写入数据——每一次写入都需要经过VPN/WAN的网络往返确认。VPN本身存在较高延迟,大量小IO请求叠加后,总耗时会被放大几十甚至上百倍。

而Windows资源管理器复制文件时,系统会采用大区块批量传输策略,结合网络缓存、异步IO等优化机制,能最大程度降低延迟对传输速度的影响,因此即使在VPN环境下,复制速度也远快于编码器直接写入。

修改方案:本地暂存后复制

以下是调整后的代码示例,先将TIFF保存到本地临时文件,再复制到网络共享:

'Create Visual Brush of UIElement.
Dim visualBrush As VisualBrush = New VisualBrush(source)
Dim drawingVisual As DrawingVisual = New DrawingVisual

Using drawingContext As DrawingContext = drawingVisual.RenderOpen
    'Draw image of element.
    drawingContext.DrawRectangle(visualBrush, Nothing, New Rect(source.RenderSize))
End Using

'Render the image.
renderTarget.Render(drawingVisual)
Dim encoder As BitmapEncoder = New TiffBitmapEncoder  
encoder.Frames.Add(BitmapFrame.Create(renderTarget))

' 1. 先保存到本地临时文件
Dim tempPath As String = Path.GetTempFileName()
Using stream As FileStream = New FileStream(tempPath, FileMode.Create, FileAccess.Write)
    encoder.Save(stream)
End Using

Try
    ' 2. 复制到网络共享路径
    File.Copy(tempPath, strSaveFileFullPath, overwrite:=True)
Finally
    ' 3. 清理临时文件
    If File.Exists(tempPath) Then
        File.Delete(tempPath)
    End If
End Try

额外注意事项

  • 临时文件使用Path.GetTempFileName()生成,自动放入系统临时目录,避免权限问题
  • 用Try...Finally确保临时文件无论复制成功与否都会被删除,防止磁盘空间浪费
  • 如果网络共享路径需要权限验证,确保应用进程拥有足够的写入权限
  • 可添加复制进度监听(比如用FileStream手动分块复制并报告进度),提升用户体验

内容的提问来源于stack exchange,提问作者so02109

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 11:16:16