VB.NET加速循环功能

时间:2012-11-23 20:04:46

标签: vb.net cycle

我有这个函数在bin文件中写入字节。

    Public Shared Function writeFS(path As String, count As Integer) As Integer
        Using writer As New BinaryWriter(File.Open(path, FileMode.Open, FileAccess.Write, FileShare.Write), Encoding.ASCII)
            Dim x As Integer
            Do Until x = count
                writer.BaseStream.Seek(0, SeekOrigin.End)
                writer.Write(CByte(&HFF))
                x += 1
            Loop
        End Using
        Return -1
    End Function

我有一个count值的textBox。 Count是要写入文件的字节数。

问题是,当我想写1mb +时,由于循环,它需要10秒以上。

我需要一种更好/更快的方式在文件FF次结束时写入十六进制值'value'

如果我没有很好地解释,我很抱歉。

2 个答案:

答案 0 :(得分:3)

这应该更好:

Public Shared Function writeFS(path As String, count As Integer) As Integer
    Using writer As New BinaryWriter(File.Open(path, FileMode.Open, FileAccess.Write, FileShare.Write), Encoding.ASCII)
        Dim x As Integer
        Dim b as Byte
        b = CByte(&HFF)
        writer.BaseStream.Seek(0, SeekOrigin.End)
        Do Until x = count
            writer.Write(b)
            x += 1
        Loop
    End Using
    Return -1
End Function

这样你每次都不会打电话给CByte。并且在每次写入后都不需要移动到流的末尾。

答案 1 :(得分:0)

之前的一些问题: 为什么功能共享?为什么使用FileSHARE.Write? WriteShare意味着OTHER进程可以在写入文件时写入该文件。为什么要写出完全相同的单个字节?为什么函数每次都返回-1?可能会更好地适应SUB?为什么不使用简单的for循环呢?

Public Sub writeFS(path As String, count As Integer)
    Using Stream As New FileStream("", FileMode.Append, FileAccess.Write, FileShare.Read)
        Stream.Write(Enumerable.Repeat(Of Byte)(255, count).ToArray, 0, count)
    End Using
End Sub

好的,如果你需要写100MB,这不适合,但你可以分区你的写作。