2012-08-17 61 views
1

我们使用的是不同的框架,而且我无法使用.NET GridView。我们有不同的集合类型和专门的网格(不从.NET控件继承)我需要将数据从网络导出到MS-Excel。这是代码。将数据从Web导出到Excel以提高性能

Me.Response.Clear() 
    Me.Response.ContentEncoding = System.Text.Encoding.GetEncoding(1254) 
    Me.Response.AddHeader("Content-Disposition", "Attachment;filename=Calls.xls") 
    Me.Response.AddHeader("Content-type", "application/ms-excel") 
      For n As Integer = 0 To Calls.Count - 1 
       Me.Response.Write(Calls(n).ID & Chr(9)) 
       Me.Response.Write(Calls(n).ID & Chr(9)) 
       Me.Response.Write(Calls(n).DateCreated & Chr(9)) 
       Me.Response.Write(Calls(n).Employee.Name & Chr(9)) 
       Me.Response.Write(Calls(n).NetDurationInText & Chr(9)) 
       Me.Response.Write(Calls(n).Result.Name & Chr(9)) 
       Me.Response.Write(vbCrLf) 
       If n Mod 50 = 0 Then 
        Me.Response.Flush() 
       End If 
      Next 
    Me.Response.End() 

但是行数超过2000-3000之后,网站响应速度很慢。尽管每隔50行刷新一次,但2k-3k行大约需要5分钟。 我试图刷新每100-200行,也试图直接写入字符串响应(我的意思是Response.Write(“”))当我调试时,它循环,所有的时间通过“for循环”。

有没有比这种方式更快地导出数据的更好的主意?

注:“呼叫”是从System.Collections.CollectionBase

继承
+0

什么是呼叫? – 2012-08-17 12:51:29

+0

它是从System.Collections.CollectionBase继承的集合 – ahmet 2012-08-17 12:54:47

+0

您是否在编写之前构建整个strBl?所有你正在刷新的是Me.Response.Write(Calls(n).ID&Chr(9))。 – Paparazzi 2012-08-17 13:17:55

回答

0

我发现了这个问题。这与我的收藏有关。我可以说这是将数据导出到我发现的excel的最佳方式。

0

如果这是关闭的只是请评论,我会删除集合。我是C#,所以我可能会误解。在你的代码中,它看起来像你在编写之前构建整个srtBl。

For n As Integer = 0 To Calls.Count - 1 
     Me.Response.Write(Calls(n).ID & Chr(9)) 
     Me.Response.Write(Calls(n).DateCreated & Chr(9)) 
     Me.Response.Write(Calls(n).Employee.Name & Chr(9)) 
     Me.Response.Write(Calls(n).Customer.Link.Name & Chr(9)) 
     Me.Response.Write(Calls(n).Vendor.Link.Name & Chr(9)) 
     Me.Response.Write(Calls(n).Result.Name & Chr(9)) 
     Me.Response.Write(vbCrLf) 
     If n Mod 50 = 0 Then 
      Me.Response.Flush() 
     End If 
    Next 
    Me.Response.End() 
+0

我也试过这个。首先我的代码就是这样。直接写入回复。然后我也尝试使用字符串生成器。但没有区别。 – ahmet 2012-08-17 13:29:35

+0

好的,但原始问题中的strBld绕过了Flush。 – Paparazzi 2012-08-17 13:59:17