读数据库,写入txt文件。数据量超大。 读数据库,写入txt文件。数据量超大,有几十万条数据,甚至上百万条。要求:读取出这些数据,并且每10万条写入一个txt文件。请问怎么样读、怎么样写比较快? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 能否具体一点儿?我只是读数据库,然后将这些数据写入txt文件而已,b+树或者哈希表用在何处?因为每个txt文件存储10万条数据,所以我用dataset分页填充。 10W一个文件不是很大的量~~~SqlDataReader逐条读出全部写入都没问题的~~ PhoneNum表中有将近1000W条手机号码数据,SqlDataReader读出数据,生成到TXT文件,每个TXT文件500000,全部生成完毕,记得貌似几十秒~~个人机器配置一般,2G内存~ public partial class Form1 : Form { int _size = 500000; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { GetDate(); } private void GetDate() { string Sql = "select Col001 from PhoneNum"; using (SqlDataReader dr = DbHelperSQL.ExecuteReader(Sql)) { int i = 0; int flag = 1; StringBuilder sb = new StringBuilder(); while (dr.Read()) { sb.Append(dr[0].ToString() + "\r\n"); i++; if (i % _size == 0) { Write_Txt(flag.ToString(), sb); sb.Remove(0, sb.Length); flag++; } } dr.Close(); Write_Txt(flag.ToString(), sb); } MessageBox.Show("OK"); } protected void Write_Txt(string FileName, StringBuilder sb) { string _path = "D:\\TxtData\\" + FileName + ".txt"; StreamWriter sw = null; { try { sw = new StreamWriter(_path, false, System.Text.Encoding.UTF8); sw.Write(sb.ToString()); sw.Flush(); } catch { } } sw.Close(); sw.Dispose(); } } 按我也在想这个问题。按照“HDNGO”的上面的做法,用SqlDataReader一次性将所有的数据都读到内存里,这样会占用很大的内存空间。因为一个txt文件只存放10万条数据,所以我用适配器分页填充DataSet,一次填充10万条,这样可以减少内存的占用。 几十秒钟就能搞定了?SqlDataReader和dataset哪个快?我填充5万条数据进dataset大概需要1、2分钟。 用SQL中的自带工具DTS,或用BULK INSERT 这句从哪儿来的SqlDataReader逐条步进哇~用DataSet才占用内存的吧晕~程序代码都给你了,你自己批量写入数据,测试一下不就好了?晕~ 你写进txt文件干什么?写进txt就不管了???以后用不着TXT了???如果你直接按顺序写入TXT那么你将来读取,查询TXT里的数据是很费事的!!所以要用到B+树 其实,数据库工具导入导出也是可以通过代码控制的在导入导出时最后一步有一个Save DTS Package(我用的是英文版),然后参看一个其中代码就可以 Switch嵌套Switch的问题,请高手看下有什么错误? vs2008 奇怪的事情 求教高手~~~~ 判断输入的字符串是一个合法的IP [存储过程调用] sql2005带有Output参数的存储过程在C#中调用的问题 装载dll文件的问题(急着用,请帮帮忙吧!) 新手问个重载++的问题!!!!! 急求帮助!!!怎么禁止webbrowser滚动条自动滚动 高手来帮帮忙啊,C#汉字转拼音少了个字啊。。。。大家来帮忙加上 请问,各位高手如何把已串中英文混合的字符串转换成图形格式,再转换成ASCII码? 求助关于dll inno setup 如何获取系统语言而让安装程序显示不同国家的语言
因为每个txt文件存储10万条数据,所以我用dataset分页填充。
个人机器配置一般,2G内存~ public partial class Form1 : Form
{
int _size = 500000;
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
GetDate();
} private void GetDate()
{
string Sql = "select Col001 from PhoneNum";
using (SqlDataReader dr = DbHelperSQL.ExecuteReader(Sql))
{
int i = 0;
int flag = 1;
StringBuilder sb = new StringBuilder();
while (dr.Read())
{
sb.Append(dr[0].ToString() + "\r\n");
i++;
if (i % _size == 0)
{
Write_Txt(flag.ToString(), sb);
sb.Remove(0, sb.Length);
flag++;
}
}
dr.Close();
Write_Txt(flag.ToString(), sb);
}
MessageBox.Show("OK");
} protected void Write_Txt(string FileName, StringBuilder sb)
{
string _path = "D:\\TxtData\\" + FileName + ".txt";
StreamWriter sw = null;
{
try
{
sw = new StreamWriter(_path, false, System.Text.Encoding.UTF8);
sw.Write(sb.ToString());
sw.Flush();
}
catch { }
}
sw.Close();
sw.Dispose();
}
}
按照“HDNGO”的上面的做法,用SqlDataReader一次性将所有的数据都读到内存里,这样会占用很大的内存空间。因为一个txt文件只存放10万条数据,所以我用适配器分页填充DataSet,一次填充10万条,这样可以减少内存的占用。
这句从哪儿来的
SqlDataReader逐条步进哇~
用DataSet才占用内存的吧晕~
程序代码都给你了,你自己批量写入数据,测试一下不就好了?晕~
你写进txt文件干什么?写进txt就不管了???以后用不着TXT了???如果你直接按顺序写入TXT那么你将来读取,查询TXT里的数据是很费事的!!所以要用到B+树
其实,数据库工具导入导出也是可以通过代码控制的
在导入导出时最后一步有一个Save DTS Package(我用的是英文版),然后参看一个其中代码就可以