0
SQLiteでvb.net(.NETFramework、Version = v4.5.2)を使用しています。
私は52000行のテーブルを持っており、それぞれをcsvファイルを作成する目的で繰り返しなければなりません。
これは私のコードですが、とてもシンプルです。すべてのデータテーブルの行の反復が前のものより遅い
Dim text As String
Dim dtRows As Integer
Dim dtColumns As Integer
text = ""
dtRows = dt.Rows.Count - 1
dtColumns = dt.Columns.Count - 1
'set column header'
For y As Integer = 0 To dtColumns
text &= dt.Columns.Item(y).ColumnName.ToString
If (y <> dtColumns) Then
text &= ";"
End If
Next
textOnlyColumn = text
text &= vbCrLf
For x As Integer = 0 To dtRows
'set row values'
For y As Integer = 0 To dtColumns
text &= dt(x)(y)
If (y <> dtColumns) Then
text &= ";"
Else
text &= vbCrLf
End If
Next
If (x Mod 300 = 0 And x <> 0) Then
WriteIntoFile(fileName, text)
text = textOnlyColumn
ts = Now().Subtract(t1)
addText(TextLog, "Execution time in " + ts.TotalMilliseconds.ToString() + " msec.")
t1 = Now()
Application.DoEvents()
End If
Next
WriteIntoFile(fileName, text)
問題がある:すべての反復が前のよりも遅くなります。 300行ごとに、この時間は約50msecになります(この写真のように)。
Echo every 300 rows
なぜですか?
診断セッションのメモリは成長しません。
文字列は不変です。したがって、現在の文字列を連結しているため、ループが遅くても300回再作成する必要があります。コレクションを使用すると、いくつかの方法が高速になりますが、なぜそれらをキャッシュするのでしょうか?各行を書式設定しながらストリームに書き出します。 [ask]を読んで[ツアー] – Plutonix
を読んでください。メモでは、StringBuilderを使用するとわずかな向上が得られます。 – N0Alias