C#多线程处理一千多万条数据。。。
读txt文件 写入数据库 不会用多线程 所以很卡 很慢
喜欢大神帮帮忙 怎么用多线程 快速快效率 导入数据库
private void button6_Click(object sender, EventArgs e)
{
//得到txt文件的数目
int iCount = listBox1.Items.Count;
DataTable dt = new DataTable();
for (int j = 0; j < iCount; j++)
{
//取到第一个txt文件
string sFile = listBox1.Items[j].ToString();
DateTime dtLast;
//放进ArrayList中
ArrayList al = Common.GetFileArray(sFile, out dtLast);
for (int i = 0; i < al.ToString().Length; i++)
{
//读取第一行的txt文件数据
string sTemp = al[i].ToString();
//以空格 截取
string[] sArr = sTemp.Split(new string[] { " " }, StringSplitOptions.None);
//创建线程 主线程
Thread Th = new Thread(delegate()
{
CountFrom(sArr);
});
//启动线程
Th.Start();
CountFrom(sArr);
}
this.label3.Text = "导入错误数据 " + indexConut + " 条";
}
}
//错误记录
static int indexConut = 1;
static void CountFrom(string[] sArr)
{
string sql = string.Format("INSERT INTO [CLRAS].[dbo].[T_LIGHTNING]([OCCURTIME],[JINDU],[WEIDU] ,[INTENSITY],[GRADIENT] ,[CHARGE]" +
",[ENERGY],[OFFSET],[LOCATEMODE],[OCCURNS] ,[TODAYID],[PROVINCE],[COUNTY],[CITY],[GRIDKEY])" +
"VALUES('{0}',{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13},{14})",
sArr[0], sArr[1], sArr[2], sArr[3], sArr[4], sArr[5], 0, 0, 0, 0, 0, 0, sArr[7], sArr[8], sArr[9]);
try
{
Database db = DatabaseFactory.CreateDatabase();
SqlCommand cmd = new SqlCommand(sql);
if (db.ExecuteNonQuery(cmd) > 0)
{
}
}
catch (Exception ex)
{
indexConut++;
}
} 多线程 --------------------编程问答-------------------- 如果文件名是顺序号的,那么就开几个线程,每个线程负责指定数字范围的文件,比如线程1负责1-1000,线程2负责1001-2000,至于线程怎么用,Thread类,去查msdn或google --------------------编程问答-------------------- 建议用包的来导入数据。 --------------------编程问答--------------------
ThreadPool --------------------编程问答-------------------- 同意楼上,ThreadPool --------------------编程问答-------------------- 瓶颈在插入方式和数据库,就算是多线程,我估计最多提高一倍的速度。
使用数据库后台的工具批量导入,我想能有10倍的效率。
--------------------编程问答-------------------- 我觉得瓶颈不在是不是多线程,而是 数据库频繁的读写。
我觉得不如写一个存储过程,传一个参数进来,参数是一个字符串,这个字符串是多行记录值的拼接,比如:
item1: S001, Jack, 23, 男
item2: S002, Mary, 24, 女
那么你传入的存储过程参数为:“S001,Jack,23,男;S002,Mary,24,女”,存储过程里面对字符串进行分割,然后该转型的转型,该 substring 的 substring。至于一次传进去的几个记录完全取决于你。 --------------------编程问答-------------------- google bluk copy --------------------编程问答-------------------- 来看看学习一下 --------------------编程问答--------------------
导入的文件是TXT文件 怎么用数据库后台的工具批量导入? --------------------编程问答--------------------
SQL数据库导出的模版就是txt 导入的也是 --------------------编程问答--------------------
瓶颈在插入方式和数据库,就算是多线程,我估计最多提高一倍的速度。
使用数据库后台的工具批量导入,我想能有10倍的效率。
导入的文件是TXT文件 怎么用数据库后台的工具批量导入?
SQL数据库导出的模版就是txt 导入的也是
求图求真相 --------------------编程问答-------------------- 线程池是王道.线程不行的 那么多文件 你电脑也不能开那么多线程啊. --------------------编程问答-------------------- 你首先得知道慢在哪,再来谈解决之道。 --------------------编程问答--------------------
你首先得知道慢在哪,再来谈解决之道。
数据太多、导入数据库会卡住 而且很慢 --------------------编程问答--------------------
线程池是王道.线程不行的 那么多文件 你电脑也不能开那么多线程啊.
我想NEW 5个线程 每个线程处理一个文件 处理完 在处理下一个文件
理论上会快五倍 不知道行不行 --------------------编程问答--------------------
你首先得知道慢在哪,再来谈解决之道。
数据太多、导入数据库会卡住 而且很慢
你这完全说得外行话么,问直接点,哪一段代码最慢? --------------------编程问答--------------------
你首先得知道慢在哪,再来谈解决之道。
数据太多、导入数据库会卡住 而且很慢
你这完全说得外行话么,问直接点,哪一段代码最慢?
一千多万条数据 我觉得哪都慢
我就是希望他能同时处理多条数据 --------------------编程问答--------------------
你首先得知道慢在哪,再来谈解决之道。
数据太多、导入数据库会卡住 而且很慢
你这完全说得外行话么,问直接点,哪一段代码最慢?
一千多万条数据 我觉得哪都慢
我就是希望他能同时处理多条数据
你这只是定性的发现了问题,而没有定量的分析问题,又如何解决问题?
1kw数据,从磁盘读取,到插入数据库,总不是一行代码就干完的,你不先找出瓶颈在哪,不理解瓶颈出现的原因。,又怎么突破瓶颈?
从txt直接导入数据的速度是很快的,因为做数据库导入功能的人认真的分析了哪里慢,解决的导致慢的问题。要么你就直接用他的导入功能,要不然,你就得自己写类似的导入功能。 --------------------编程问答--------------------
你首先得知道慢在哪,再来谈解决之道。
数据太多、导入数据库会卡住 而且很慢
你这完全说得外行话么,问直接点,哪一段代码最慢?
一千多万条数据 我觉得哪都慢
我就是希望他能同时处理多条数据
你这只是定性的发现了问题,而没有定量的分析问题,又如何解决问题?
1kw数据,从磁盘读取,到插入数据库,总不是一行代码就干完的,你不先找出瓶颈在哪,不理解瓶颈出现的原因。,又怎么突破瓶颈?
从txt直接导入数据的速度是很快的,因为做数据库导入功能的人认真的分析了哪里慢,解决的导致慢的问题。要么你就直接用他的导入功能,要不然,你就得自己写类似的导入功能。
他自己有自带的导入数据功能?
但是我的数据还要处理才导入数据 --------------------编程问答--------------------
你首先得知道慢在哪,再来谈解决之道。
数据太多、导入数据库会卡住 而且很慢
你这完全说得外行话么,问直接点,哪一段代码最慢?
一千多万条数据 我觉得哪都慢
我就是希望他能同时处理多条数据
你这只是定性的发现了问题,而没有定量的分析问题,又如何解决问题?
1kw数据,从磁盘读取,到插入数据库,总不是一行代码就干完的,你不先找出瓶颈在哪,不理解瓶颈出现的原因。,又怎么突破瓶颈?
从txt直接导入数据的速度是很快的,因为做数据库导入功能的人认真的分析了哪里慢,解决的导致慢的问题。要么你就直接用他的导入功能,要不然,你就得自己写类似的导入功能。
他自己有自带的导入数据功能?
但是我的数据还要处理才导入数据
听你这么说 我豁然开朗了 谢谢 --------------------编程问答--------------------
瓶颈在插入方式和数据库,就算是多线程,我估计最多提高一倍的速度。
使用数据库后台的工具批量导入,我想能有10倍的效率。
导入的文件是TXT文件 怎么用数据库后台的工具批量导入?
SQL数据库导出的模版就是txt 导入的也是
求图求真相
度娘一下 SQL数据库导入导出数据图解教程 真相就有了 --------------------编程问答-------------------- 先把数据读取到内存中,然后用System.Data.SqlClient.SqlBulkCopy这个函数进行写入数据库。 --------------------编程问答-------------------- 用异步吧,比多线程要顺畅很多。
private delegate YourThink someThink();
private YourThink GetSomeThink()
{
//通过代码取你需要的数据
return (yourThink);
}
private void button1_Click(object sender, EventArgs e)
{
//点击执行异步操作
someThink GGID = GetSomeThink;
IAsyncResult iAsyncResult = GGID.BeginInvoke(DoThinkCompleted, GGID);
}
//异步回调函数
private void DoThinkCompleted(IAsyncResult asyncResult)
{
//这里处理完你的事情
//然后继续异步去执行
someThink GGID = GetSomeThink;
IAsyncResult iAsyncResult = GGID.BeginInvoke(DoThinkCompleted, GGID);
} --------------------编程问答-------------------- 打开MP选项,多核优势放出来 --------------------编程问答--------------------
打开MP选项,多核优势放出来
MP是什么?
--------------------编程问答--------------------
用异步吧,比多线程要顺畅很多。
private delegate YourThink someThink();
private YourThink GetSomeThink()
{
//通过代码取你需要的数据
return (yourThink);
}
private void button1_Click(object sender, EventArgs e)
{
//点击执行异步操作
someThink GGID = GetSomeThink;
IAsyncResult iAsyncResult = GGID.BeginInvoke(DoThinkCompleted, GGID);
}
//异步回调函数
private void DoThinkCompleted(IAsyncResult asyncResult)
{
//这里处理完你的事情
//然后继续异步去执行
someThink GGID = GetSomeThink;
IAsyncResult iAsyncResult = GGID.BeginInvoke(DoThinkCompleted, GGID);
}
不懂、没接触过 弄教下我? --------------------编程问答--------------------
先把数据读取到内存中,然后用System.Data.SqlClient.SqlBulkCopy这个函数进行写入数据库。
这个怎么用?会快些? --------------------编程问答--------------------
先把数据读取到内存中,然后用System.Data.SqlClient.SqlBulkCopy这个函数进行写入数据库。
这个怎么用?会快些?
怎么用?google一下很简单的,
至于速度吗,是官方提供的一个操作类主要用于一次性插入大量数据用的,
之前用过50W数据一本2,3秒钟就入库了。 --------------------编程问答--------------------
先把数据读取到内存中,然后用System.Data.SqlClient.SqlBulkCopy这个函数进行写入数据库。
这个怎么用?会快些?
怎么用?google一下很简单的,
至于速度吗,是官方提供的一个操作类主要用于一次性插入大量数据用的,
之前用过50W数据一本2,3秒钟就入库了。
这个听起来貌似很牛的样子。。。 --------------------编程问答--------------------
先把数据读取到内存中,然后用System.Data.SqlClient.SqlBulkCopy这个函数进行写入数据库。
这个怎么用?会快些?
怎么用?google一下很简单的,
至于速度吗,是官方提供的一个操作类主要用于一次性插入大量数据用的,
之前用过50W数据一本2,3秒钟就入库了。
这个听起来貌似很牛的样子。。。
2、3s 是挺快 --------------------编程问答--------------------
先把数据读取到内存中,然后用System.Data.SqlClient.SqlBulkCopy这个函数进行写入数据库。
这个怎么用?会快些?
怎么用?google一下很简单的,
至于速度吗,是官方提供的一个操作类主要用于一次性插入大量数据用的,
之前用过50W数据一本2,3秒钟就入库了。
这个听起来貌似很牛的样子。。。
我开始是打算用 但是我还要对数据处理不好用
补充:.NET技术 , C#