1

将大型(25,000 行)SQL Server CE 数据库导出到 XML 文件的更快方法是什么?

这是我目前使用的:

using (SqlCeConnection cn = new SqlCeConnection(strConnection))
{
    if (cn.State == ConnectionState.Closed)
        cn.Open();
    using (SqlCeCommand cmd = new SqlCeCommand(strCommand, cn))
    {
        SqlCeDataAdapter da = new SqlCeDataAdapter(cmd);
        DataSet ds = new DataSet();
        da.Fill(ds, "item");
        StreamWriter xmlDoc = new StreamWriter("Output.xml");
        ds.WriteXml(xmlDoc);
        xmlDoc.Close();
    }
}

在模拟器(Windows Mobile)中大约需要 60 秒。

另外.. 我正在使用 Compact Framework 3.5 和 SQL Server CE 3.5。

当前性能:整个代码 60 秒 ~20 秒,没有ds.WriteXml(xmlDoc);.,剩下 ~40 秒ds.WriteXml(xmlDoc);.

4

2 回答 2

1

如果付出的努力对您来说是值得的,那么最快的方法可能是滚动您自己的 XML 生成。XmlWriter() 的库实现是循环中的循环,具有相当大的通用性。

声明您自己的输出流,将缓冲区大小指定为相当大的值(但仍然正常)。我之前已经测试过 StringBuilder() 并将其 append() 数百万次,性能良好。其他输出选项可能没有那么快,但我希望 StreamWriter 在适当的缓冲大小时提供良好的性能,并且它会强制您在内存中构建所有内容。

不要使用 da.Fill() - 替换为 SqlCeDataReader。

对于每一行。使用编码尽可能接近金属的逻辑为单行生成 XML。即,预先计算列索引值等,而不是在此循环中使用列名,而是根据需要使用硬编码的类型转换。不要遍历每一列,把每一列

此外,通过让数据库生成 XML 输出来进行测试。虽然我不认为这是最快的,但它很容易尝试,如果结果很快,你永远不会不尝试就发现它。

于 2013-09-12T17:08:54.847 回答
1

也许这样的事情更轻量级:

    private void ExportDataTable(SqlCeCommand cmd, SqlCeConnection conn)
    {
        cmd.Connection = conn;
        System.Data.DataTable table = new System.Data.DataTable();
        table.Locale = CultureInfo.InvariantCulture;
        table.Load(cmd.ExecuteReader());
        StreamWriter xmlDoc = new StreamWriter("Output.xml");
        table.WriteXml(xmlDoc);
    }
于 2013-09-12T15:53:21.787 回答