エクスポート用のファイルを返すために使用しています。このエクスポートを多くのレコードで実行すると、実行に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メソッドはIDを受け取り、別のメソッドを呼び出します。このメソッドは、データベースから一連のレコードを取得し、各行で一連の計算を実行してからStringBuilderを作成し、各行についてStringBuilderにデータを入力してからにポップします。 .ToString()を実行した後のList(Of String)。次に、このメソッドはList(Of String)をExportFileメソッドに返し、このメソッドは別のStringBuilderを作成し、そのリストからすべての文字列を追加し、それを1つの大きな文字列に変換して、結果の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