2016-09-15 96 views
0

我有我存储一个循环在每次迭代运行进行约300,000次:什么是从vb.net获取数据的最快方式?

time_elps = stwt.Elapsed.TotalMilliseconds 
read.Add(time_elps, OFV_best) 

最后,我只想把read(当然字典)的值上绘制的Excel图表。

我试图导出这些数据到excel:

oxl = CreateObject("Excel.application") 
oxl.Visible = True 
owb = oxl.Workbooks.Add 
osheet = owb.ActiveSheet 

For i = 0 To 100 
    osheet.Cells(i + 1, 1).Value = read.Item(read.Keys.ElementAt(i)) 
    osheet.Cells(i + 1, 2).value = read.Keys.ElementAt(i) 
Next 

,并到一个文本文件:

objStreamWriter = New StreamWriter("C:\Users\Dr. Mohamed ElWakil\Desktop\data.txt") 

For i = 0 To read.Count - 1 
    objStreamWriter.WriteLine(CStr(read.Item(read.Keys.ElementAt(i)) & "," & (read.Keys.ElementAt(i)))) 
Next 

objStreamWriter.Close() 

在两起案件需要花费太多太多的时间,它的时间比运行时间代码本身。

建议如何轻松快捷地获取我的数据?

+1

哪个for循环花费太多时间?在第一个例子中,你只做了100次迭代,而第二次则完成了300,000次。 – SEFL

+2

值检索可能是需要大部分时间的操作。尝试使用'foreach var pair in read'迭代。您将得到一个包含键和值的对,并且不需要通过键来查询该值。 –

+0

@SEFL,通过excel或文本文件提取数据需要太多时间..算法或代码可能在两分钟内完成操作,但我一直等待大约15分钟以获取所有数据 – AlKobtan

回答

0
每次我创造与time.hour和time.minute尾名称为“数据”的新txt文件时

为@NicoSchertler,使用在读的每VAR得到var.value和var.key

这是最快的方法

Dim file As System.IO.StreamWriter 
Dim path As String 
path = "C:\Users\Dr. Mohamed ElWakil\Desktop\data" & Now.Hour & Now.Minute & ".txt" 
file = My.Computer.FileSystem.OpenTextFileWriter(path, True) 

For Each var In read 
    file.WriteLine(var.Key & "," & var.Value) 
Next 

file.Close() 
1

seperately写入每个值Excel是真的很慢,有一个与此去:

Dim arr2D(100, 1) As String 
    For i = 0 To 100 
     arr2D(i, 0) = read.Item(read.Keys.ElementAt(i)) 
     arr2D(i, 1) = read.Keys.ElementAt(i) 
    Next 
    Dim oExcel As Object = CreateObject("Excel.Application") 
    Dim oWorkbook As Object = oExcel.Workbooks.Add 
    Dim oWorksheet As Object = oWorkbook.Worksheets(1) 
    Dim vRange As Object = oWorksheet.Range("A1") 
    vRange = vRange.Resize(UBound(arr2D, 1) + 1, UBound(arr2D, 2) + 1) 
    vRange.Formula = arr2D 
    vRange.Columns.autofit() 
    oExcel.Visible = True 
+0

我认为这是Excel的最佳方式,我试过 ,但写入到txt文件比这更快,并且从字典复制到二维数组也需要时间 并且我尝试“读取”为两个从一开始就是一维数组,但是我必须每次都“重新调整”它,这也需要一些时间 – AlKobtan

相关问题