对于通过UDP进行打文件传输的朋友应该首先会考虑到一个问题,那就是由于UDP并不会根据先来先到原则进行发送,也许你发送端发送的时候是以包1和包2的顺序传输的,但接收端可能以包2和包1 的顺序来进行接收,这就导致了文件的错序而损坏,要避免这个问题就应该现将文件分块,然后在数据包中写入块序号,在接收的时候将对应块映射到文件的对应位置。
这时第二个问题来了,你得先创建一个对应源文件同样大小的文件。
如果要快速创建一个5GB甚至更大的20GB或100GB的文件该如何处理呢?

事实上相当的简单(过去我曾经用过通过调用fsutil命令行来快速构建,但很快发现这并不是一个好方法),.NET也对此进行了非常好的优化,只需要使用FileStream的Seek指令移动光标到文件大小再写入文件即可。
处于效率的考虑(比如某些计算机反应较慢或硬盘速度较慢)那么还是写在独立的线程或任务中较为合适。
以下是代码(VB版本):

Private FileName As String
    Private FileSize As ULong
    Private sl As ULong

Private Sub CreateFile()
        Dim fs As New IO.FileStream(FileName, IO.FileMode.OpenOrCreate)
        fs.Seek(FileSize, IO.SeekOrigin.Begin)
        fs.WriteByte(0)
        fs.Flush()
        fs.Close()
        MsgBox("文件创建结束!" & vbCrLf & "文件大小:" & FileSize / 1024 / 1024 & "MB" & vbCrLf & "创建时间:" & (My.Computer.Clock.TickCount - sl) / 1000 & "秒")
    End Sub

Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
        Dim fl As ULong
        fl = 1024 * 1024 * 1024
        fl *= 5

FileName = "D:\test.iso"
        FileSize = fl
        Dim th As New Threading.Thread(AddressOf CreateFile)
        sl = My.Computer.Clock.TickCount
        th.Start()

End Sub

经过在Core T6570 /4G /500G 5400RPM的计算机上进行测试,写一个5GB的文件大概需要31毫秒,写一个15GB的文件大概需要171毫秒,写一个90GB的文件需要191毫秒。(写入的时间与CPU当时的实际负载有关)

最新文章

  1. 采购信息记录修改[BDC]
  2. datagridview 定位到最后一行,定位不准的原因
  3. Asp.Net MVC 扩展 Html.ImageFor 方法详解
  4. Unity中下载和本地保存实例
  5. 转:45 Useful JavaScript Tips, Tricks and Best Practices
  6. .net c# 正则表达式 平衡组/递归匹配
  7. php的register_long_arrays可以关闭以提高性能
  8. 盛最多水的容器(java实现)
  9. [LeetCode&Python] Problem 167. Two Sum II - Input array is sorted
  10. Scala下划线_使用
  11. Git 上传文件到 码云 gitee
  12. sqlserver查询自定义的函数
  13. 2017-2018-1 20179202《Linux内核原理与分析》第十一周作业
  14. ORA-12514
  15. Jquery 中 .trigger 的用法
  16. 【Raspberry pi】python ide-spyder
  17. PHP封装返回Ajax字符串和JSON数组
  18. Day3(2)bash的特性
  19. python基础17 ---继承补充知识
  20. 每天一个linux命令(23):Linux 目录结构(转)

热门文章

  1. 行业百科知识--Github
  2. Oracle EBS-SQL (BOM-9):检查系统BOM总数.sql
  3. C#中通过Process启动的外部第三方程序MainWindowHandle句柄为0
  4. perl 继承写法
  5. EditPlus自动执行出结果设置
  6. jquery validation plugin 使用
  7. 京东区块排版负margin用法
  8. POJ1325 Machine Schedule 【二分图最小顶点覆盖】
  9. ContextMenuStrip 添加在窗体。点击右键不能显示问题解答
  10. sql2008R2数据库备份--双机备份