2

这是 ASP Classic 中将文件保存到磁盘的一种方法。这需要很长时间,但我不知道为什么。通常,我不会太介意,但是它处理的文件非常大,因此需要每秒保存速度超过 100kB。严重缓慢。(旧的遗留系统,创可贴修复直到它被替换......)

Public Sub SaveToDisk(sPath)
        Dim oFS, oFile
        Dim nIndex

        If sPath = "" Or FileName = "" Then Exit Sub

        If Mid(sPath, Len(sPath)) <> "\" Then sPath = sPath & "\"  '"

        Set oFS = Server.CreateObject("Scripting.FileSystemObject")
        If Not oFS.FolderExists(sPath) Then Exit Sub

        Set oFile = oFS.CreateTextFile(sPath & FileName, True)

        For nIndex = 1 to LenB(FileData)
            oFile.Write Chr(AscB(MidB(FileData,nIndex,1)))
        Next

        oFile.Close
    End Sub

我之所以问,是因为这段代码中有很多 WTF,所以我正在扑灭这些大火,同时获得一些帮助。

4

2 回答 2

1

您应该做的是将二进制请求读入 ADODB.Stream 对象,并在一个快速步骤中将其转换为纯 ASCII 文本。

Set objStream = Server.CreateObject("ADODB.Stream")

    objStream.Type = 1
    objStream.Open
    objStream.Write Request.BinaryRead(Request.TotalBytes)
    objStream.Position = 0
    objStream.Type = 2
    objStream.Charset = "ISO-8859-1"

    FormData = objStream.ReadText

    objStream.Close

Set objStream = Nothing

请注意变量 FormData 现在如何将表单数据包含为文本。然后解析这个文本并定位每个文件的开头和长度,并使用 ADODB.Stream CopyTo 方法提取文件的特定部分并将其保存到磁盘。

于 2010-05-06T17:05:52.053 回答
1

我在您的代码中的任何地方都没有看到您对“FileData”的定义 - 这是从哪里来的?您一次将一个字符写入磁盘是否有原因?我怀疑这是你的问题 - 写入 100K 的数据需要 100K 次通过这个循环,这可能是你速度变慢的原因。为什么不能替换底部的写循环:

For nIndex = 1 to LenB(FileData)
    oFile.Write Chr(AscB(MidB(FileData,nIndex,1)))
Next

用一条语句一次性写入文件?

oFile.Write FileData
于 2010-04-27T15:51:44.923 回答