C# 从数据库表写入文本文件的最快方法是什么?
我有一个数据分析应用程序,我需要能够使用c将数据库表导出到一个带分隔符的文本文件中。由于应用程序体系结构的原因,这些数据必须带到c应用程序中。无法使用任何数据库导出功能。表的大小可以从几列和几百行到大约100列到超过一百万行不等 根据评论进一步澄清- 我有一个Windows服务作为数据访问层,它将从表示层获取导出请求。导出完成后,服务将需要将导出作为流对象传递回表示层,表示层可以是WPF应用程序或Silverlight应用程序。然后将为用户提供保存或打开导出的选项 最快的方法是什么C# 从数据库表写入文本文件的最快方法是什么?,c#,performance,C#,Performance,我有一个数据分析应用程序,我需要能够使用c将数据库表导出到一个带分隔符的文本文件中。由于应用程序体系结构的原因,这些数据必须带到c应用程序中。无法使用任何数据库导出功能。表的大小可以从几列和几百行到大约100列到超过一百万行不等 根据评论进一步澄清- 我有一个Windows服务作为数据访问层,它将从表示层获取导出请求。导出完成后,服务将需要将导出作为流对象传递回表示层,表示层可以是WPF应用程序或Silverlight应用程序。然后将为用户提供保存或打开导出的选项 最快的方法是什么 感谢使用SQ
感谢使用SQL Server:使用BCP
如果您使用的是SQL Server 2008或可能是2005,则可以右键单击数据库并选择任务->导出数据。选择数据库作为输入,选择平面文件目标作为输出。指定文件名,指定双引号作为文本限定符,单击“下一步”几次,就完成了。您甚至可以将任务保存为SSIS包,以便再次运行
这样做会在幕后使用SSI。它具有非常高的性能,因为它在一个管道中使用多个线程。嗯,首先,如果不一定要使用c,那么sql管理控制台能够完成这样的任务 为了实现最佳性能,我建议您采用消费品生产商2线程概念 一个线程将是读者, 负责阅读来自 DB-在这种情况下,我会 建议使用IReader读取 值,并将其放入当前队列中。 另一个是编写器,它只需使用文件流从队列中写入数据。 您还可以通过分页方式读取信息来获得更高的性能,也就是说,如果您知道将有100000条记录,将其分为1000个数据块,让一个读卡器从数据库中读取这些数据块并将其放入队列中
尽管后一种解决方案更为复杂,但它将允许您以尽可能最好的方式使用CPU,并避免延迟。如果您确实需要使用C,最快的方法是使用ADO.NET的DataReader,它是只读的,仅向前,可能非常适合您。注意空字段,它不能很好地处理,如果需要处理它们,可能其他ADO.NET资源对您来说会更有趣。如果需要快速查询数据,您可以在一个或多个线程中使用“Firehose”游标,直接从数据库中读取。 var sqlConnection=new SqlConnectionConfigurationManager.ConnectionStrings[connstr].ToString; var sqlDataAdapter=新的sqlDataAdapter从tnm\u story\u状态中选择*sqlConnection; sqlConnection.Open; var数据集=新数据集; sqlDataAdapter.FilldataSet; sqlConnection.Close; var dataTable=dataSet.Tables[0]; var streamWriter=newStreamWriter@C:\db.txt,false; var sb=新的StringBuilder; 对于var col=0;col