开发者

ASP SaveToDisk method takes an incredible amount of time

This is a method in ASP Classic that saves a file to disk. It takes a very long time but I'm not sure why. Normally, I wouldn't mind so much, but the files it handles are pretty large so need this needs to faster than 100kB a second save. Seriously slow. (old legacy system, band aid fix till it gets replaced...)

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.开发者_如何学PythonCreateObject("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

I'm asking because there are plenty of WTF's in this code so I'm fighting those fires while getting some help on these ones.


I don't see your definition for "FileData" anywhere in your code - where is this coming from? Is there a reason you're writing it to disk a single character at a time? I'd suspect this is your problem - writing 100K of data takes 100K trips through this loop, which could be the reason for your slowdown. Why can't you replace the write loop at the bottom:

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

with a single statement to write the file all at once?

oFile.Write FileData


What you should do is read the binary request into an ADODB.Stream object and convert it to plain ASCII text in a single fast step.

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

Notice how the variable FormData now contains the form data as text. Then you parse this text and locate the start and length of each file, and use ADODB.Stream CopyTo method to extract the specific portion of the file and save it do disk.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜