Мы используем его для возврата файла для экспорта. Когда мы запускаем этот экспорт для большого количества записей, это занимает около 10 минут. Вот фрагмент кода, который фактически вызывает метод File () и возвращает результат.
Public Function Export(ByVal ID As Integer) As FileContentResult
Dim str As String = String.Empty
Dim data() As Byte
Dim r As New ExportResult
Dim Test As New TestConnection(WebUtil.UserToken)
'This line is important coz IE download was prevented without this.
ControllerContext.HttpContext.Response.ClearHeaders()
r = Test.ExportFile(ID)
data = Encoding.ASCII.GetBytes(r.ResponseString)
Return File(data, "text/plain", r.DefaultFileName)
End Function
Фактический метод ExportFile принимает идентификатор, вызывает другой метод, который получает кучу записей из базы данных, выполняет кучу вычислений для каждой строки, а затем создает StringBuilder, и для каждой строки заполняет StringBuilder и затем вставляет его в List (Of String) после выполнения .ToString (). Затем этот метод возвращает List (Of String) в метод ExportFile, и этот метод создает еще один StringBuilder, добавляет все строки из этого списка, преобразует его в одну большую строку и устанавливает его в свойстве ResponseString результата ('r 'в коде выше).
Так вот как это работает. Есть ли способ ускорить этот процесс, например, много?
-Скотт
Редактировать: больше код
Public Function ExportFile(ByVal ID As Integer) As ExportResult
Dim result As New ExportResult
Dim s As New StringBuilder
'Get all Records
Dim dt As New DataTable
Using dal As New SQL
dal.Parameters.AddWithValue("@ID", ID)
dal.Execute("[dbo].[uspGet]", dt)
dal.Parameters.Clear()
End Using
Dim dataobj As New DataObj(dt, ID)
'Create FileName
If dt.Rows.Count > 0 Then
Dim StartDate As DateTime = DateTime.Parse(dt.Rows(0).Item("StartDate"))
Dim EndDate As DateTime = DateTime.Parse(dt.Rows(0).Item("EndDate"))
result.DefaultFileName = String.Format("HMDA_{0}_{1}.dat", String.Format("{0:MMyyyy}", StartDate), String.Format("{0:MMyyyy}", EndDate))
End If
'Add Title Line
s.AppendLine(dataobj.CreateTitleLine())
'Add all Record Lines
Dim records As List(Of String) = dataobj.CreateRecordLines()
Dim last As Integer = records.Count - 1
For i = 0 To last
If i = last Then
s.Append(records(i))
Else
s.AppendLine(records(i))
End If
Next
result.ResponseString = s.ToString
Return result
End Function