Vb.net 检索xml表数据的性能优化

Vb.net 检索xml表数据的性能优化,vb.net,performance,sql-server-ce,Vb.net,Performance,Sql Server Ce,我已经写了一个代码,它按照标题所说的去做。问题是,整个过程只花了10分钟就完成了1000条记录。下面是代码:用vb.NET3.5和SQLServerCE编写 MyConnection.Open() Dim count As UInt32 cmnd = New SqlCeCommand(sqlstring, MyConnection) cmnd.CommandType = CommandType.TableDirect myreader = cmnd.ExecuteResultSet(Re

我已经写了一个代码,它按照标题所说的去做。问题是,整个过程只花了10分钟就完成了1000条记录。下面是代码:用vb.NET3.5和SQLServerCE编写

MyConnection.Open()
 Dim count As UInt32
 cmnd = New SqlCeCommand(sqlstring, MyConnection)
 cmnd.CommandType = CommandType.TableDirect
 myreader = cmnd.ExecuteResultSet(ResultSetOptions.Scrollable Or ResultSetOptions.Updatable)
 myreader.ReadLast()
 myreader.Read()
 Dim i As UInt16
 Do Until _TableItem(count) Is Nothing
     record = myreader.CreateRecord()
     For i = 0 To 20
         record.SetString(i, _TableItem(count + i).value())
     Next
     myreader.Insert(record)
     count += 21
 Loop
MyConnection.Close()
如何优化此代码以获得更好的性能


谢谢。

你需要测量并找到需要很长时间的东西。10分钟1000个项目是非常长的时间,所以应该很容易发现问题。使用秒表类用于此类测量

首先尝试查看您的代码是否与记录数一致-测量1-10-100-1000条记录。我希望你们至少能在^2上发现时间的非线性增长


测量记录对象上的创建与向数据库发送数据是分开的,即只需删除myReader.Insert。

好吧,尽管我自己已经解决了这个问题,但我要回答的是关于其他陷入相同问题的问题

实际上,解决方案是使用for each和select casec switch语句,而不是do和for循环。代码如下所示:

For Each child as _TableItemChildNode in _TableItem
    Select Case count
        case 0
            record = myreader.CreateRecord()
            record.SetString(count, child.value())
            count += 1
        case 1 to 19
            record.SetString(count, child.value())
            count += 1
        case 20
            record.SetString(count, child.value())
            myreader.Insert(record)
            count = 0
    End Select
Next

仅代码更改就节省了我整整7分钟的时间。请注意,默认情况下,该过程需要很长时间,因为项目中的记录非常大。

Most likley\u TableItem函数从数据库中读取count。。。考虑将这个函数的源添加到问题中。^ Table项标记要提取的标记位置,内文文本将提取子数据,我曾经考虑下载整个数据并用StrugBuudor函数完成该任务。但是如何做到这一点,它会有帮助吗?还有count是一个整数,我的意思是value函数会将子内部文本提取为string,我的错。非常奇怪,删除insert函数会在几秒钟内得到一个零!全程推进。这意味着插入函数本身很轻。最耗时的一行是访问value属性的那一行,用常量字符串替换属性,这为我节省了10分钟中的7.5分钟。现在,是否仍然可以将数组属性缓存为值或类似的值请注意_TableItem数组本身并不耗时。您的_TableItemindex是否可能使用xmlNode.Child[index]或其他等价代码?在操作中正常获取XML节点的第n个子节点,而每个人都希望它是O1。正如我所说的,发布TableItem的代码可能会有所帮助。。。。