我遇到的问题是应该在TypedTable上加载数据库表并在更新部分插入(或更新,如果密钥已经存在),尽管我的代码运行速度非常慢。
现在,我处理的大多数表需要完全刷新,所以我擦除数据并使用简单的AddTableRow(row)
过程重新添加typedtable中另一个表的所有内容,但是当我需要时更新数据我使用LoadDataRow(row, fAcceptChanges)
函数,即使使用.BeginLoadData() -> .EndLoadData()
,它也会变得非常慢(每秒2/3更新),其中一个表包含大约500k行数据(每行有15行) COLS)。
我对vb.net很新,所以我不太了解我必须更新数据表的替代方案,但如果有人知道任何加速它的方法,我会很高兴听到一切。< / p>
更多信息:
主要是因为我逐行插入数据是因为我需要检查我的表的约束,这样我就可以处理从插入部分引发的exeptions,加上TypedDataTable
的自动约束检查考虑到我必须处理10个以上的数据库表,这是非常好的。
我的更新代码就像这样运行atm:
Table = Parser.GetData()
TypedTable = TableAdapter.GetData()
For Each row In Table
Try
Dim TypedRow = TypedTable.NewRow()
LoadNotTypedIntoTyped(row, TypedRow)
TypedTable.BeginLoadData()
TypedTable.LoadDataRow(TypedRow.ItemArray, True) 'TODO speed up this
TypedTable.EndLoadData()
Catch ex As Exception
'Generic exception handling here
End Try
Next
SqlBulkCopyLoadProcedure()
答案 0 :(得分:0)
我找到了解决我特定问题的好方法;使用typedtable意味着我对表约束有更多的控制权,因为我的数据源与DB表有关,所以我创建了一个新的空类型表来加载新数据,然后我从db加载当前数据并{{ 1}}合并数据。
在我的情况下,这是可能的,因为我处理的数据量不是太大(大约500k记录),如果内存成为问题我认为一个可行的解决方案可以是创建支持表并使用SQL直接合并,但如果我错在这里,我就是一个DB新手,所以我很反感
我所做的代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
AudioAttributes aa = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ALARM)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build();
ringtone.setAudioAttributes(aa);
} else {
ringtone.setStreamType(AudioManager.STREAM_ALARM);
}