【发布时间】:2009-07-10 02:44:17
【问题描述】:
使用 C#,我想从 DB 生成 1,000,000 个文件,每个记录在单独的文件中。 在最短的时间内生成此文件的最佳方法是什么?
这是我没有线程的代码:
AppDomain.CurrentDomain.ProcessExit += new EventHandler(CurrentDomain_ProcessExit); // to calculate the execution time in case of using threading
SqlCommand cmd = new SqlCommand(@"select top 1000000 p1+','+p2+','+p3+','+p4 as line from lines ", con);
con.Open();
var rdr = cmd.ExecuteReader();
int i = 0;
while (rdr.Read())
{
string line = rdr.Getring(0);
string filename = String.Format("file{0}.txt", ++i);
File.WriteAllText(filename, line);
}
rdr.Close();
con.Close();
【问题讨论】:
-
他必须是因为他的代码中的 var 关键字。
-
您真的希望它们都在一个目录中吗?
-
(1) Windows 资源管理器无法处理一个目录中的数千个文件。不过 NTFS 可以。准备通过命令行或以编程方式工作。考虑将文件拆分到子文件夹。 (2) 如果文件名最终比 DOS 8.3 长,NTFS 将为您创建一个短名称。这将减慢 100,000 个文件的速度。禁用短名称。 (3) 如果不是子文件夹,请考虑以允许您分组处理文件的方式命名文件。例如f0000001.txt,而不是 f1.txt。 discuss.fogcreek.com/joelonsoftware/…
-
我使用 NTFS,我不会使用资源管理器查看文件所有文件名将从 000001.txt 到 999999.txt 都在单个文件夹中
-
如果这不仅仅是一个一次性的事情,您最好看看使用 Jeffrey Richter 的电源线程库 wintellect.com/PowerThreading.aspx 和 msdn.microsoft.com/en-us/magazine/cc546608.aspx 中的一些概念
标签: c# multithreading io