Parallel.For并行录入10万条数据出错 40C

用了一个CodeTimer测试性能,在循环方法体的时候,老大说让用Parallel.For代替for循环。

结果瞬间快了100倍的测试速度,但是又出现一个问题了,数据录不进去了。

经常循环10万次才录入一条,断点调试后发现就第一条录进去了,后面的都是数据库连接池错误。

我想问下用并行之后,这种情况是正常的吗,如果不正常,有什么方法解决呢

代码中的Time()的三个参数,第一个是方法名(无视),第二个是循环次数,第三个是方法体,关于Time()方法我也列出来,详情可以看http://blog.zhaojie.me/2009/03/codetimer.html

 Time("注册性能", 100, () =>
            {
                try
                {
                    User user = new User() { UserName = Guid.NewGuid().ToString(), Password = "123" };
                    ips.Register(user);
                }
                catch(Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            });

图片说明

Timer方法体

 public static void Initialize()
        {
            Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.High;
            Thread.CurrentThread.Priority = ThreadPriority.Highest;
            Time("", 1, () => { });
        }

        public static void Time(string name, int iteration, Action action)
        {
            if (String.IsNullOrEmpty(name)) return;

            // 1.
            ConsoleColor currentForeColor = Console.ForegroundColor;
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine(name);

            // 2.
            GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
            int[] gcCounts = new int[GC.MaxGeneration + 1];
            for (int i = 0; i <= GC.MaxGeneration; i++)
            {
                gcCounts[i] = GC.CollectionCount(i);
            }

            // 3.
            Stopwatch watch = new Stopwatch();
            watch.Start();
            ulong cycleCount = GetCycleCount();
            //for (int i = 0; i < iteration; i++) action();
            Parallel.For(0, iteration, (i) => { action(); });
            ulong cpuCycles = GetCycleCount() - cycleCount;
            watch.Stop();

            // 4.
            Console.ForegroundColor = currentForeColor;
            Console.WriteLine("\tTime Elapsed:\t" + watch.ElapsedMilliseconds.ToString("N0") + "ms");
            Console.WriteLine("\tCPU Cycles:\t" + cpuCycles.ToString("N0"));

            // 5.
            for (int i = 0; i <= GC.MaxGeneration; i++)
            {
                int count = GC.CollectionCount(i) - gcCounts[i];
                Console.WriteLine("\tGen " + i + ": \t\t" + count);
            }

            Console.WriteLine();
        }

        private static ulong GetCycleCount()
        {
            ulong cycleCount = 0;
            QueryThreadCycleTime(GetCurrentThread(), ref cycleCount);
            return cycleCount;
        }

        [DllImport("kernel32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool QueryThreadCycleTime(IntPtr threadHandle, ref ulong cycleTime);

        [DllImport("kernel32.dll")]
        static extern IntPtr GetCurrentThread();

1个回答

可能你的连接池用完了,因为你用的并行,获取连接池的时候数据库的处理较慢,连接释放的慢,导致连接池里的连接不够用。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C# 使用Parallel并行开发Parallel.For、Parallel.Foreach实例

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Threading.Tasks; using System.Collections.Concurrent; namespace ConsoleApplication

C# 并行循环Parallel.For

从0到15迭代并且打印出迭代索引号和索引号的平方。 using System; using System.Threading.Tasks; //必须使用这个命名空间 namespace HelloWorld { class Program { static void Main(string[] args) { Para

C# Parallel并行

System.Threading.Tasks.Parallel命名空间下的静态类Parallel用来代替Task类 一、Parallel.Invoke: 试图将很多方法并行运行,如果传入的是4个方法,则至少需要4个逻辑内核才能足以让这4个方法并发运行,逻辑内核也称为硬件线程。、 需要注意的是:1.即使拥有4个逻辑内核,也不一定能够保证所需要运行的4个方法能够同时启动运行,如果其中的一个内

并行计算—parallel,for联合使用

// OpenMP1.cpp : 定义控制台应用程序的入口点。 //并行化作用于外层循环 #include "stdafx.h" #include "omp.h" #include int _tmain(int argc, _TCHAR* argv[]) { int i,j; omp_set_num_threads(4); #pragma omp parallel for pri

Oracle中如何用一条SQL快速生成10万条测试数据

     做数据库开发或管理的人经常要创建大量的测试数据,动不动就需要上万条,如果一条一条的录入,那会浪费大量的时间,本文介绍了Oracle中如何通过一条SQL快速生成大量的测试数据的方法。产生测试数据的SQL如下:SQL> select rownum as id,  2                 to_char(sysdate + rownum / 24 / 3600, yyyy

C#并行运算 Parallel.Invoke、Parallel.For、Parallel.Foreach性能测试及示例

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Numerics; namespace Sample3 { class Program { static v

[C#]『Parallel.For』『Parallel.ForEach』任务并行库使用小计

 Parallel 类提供对并行循环和区域的支持。 许多个人计算机和工作站都有两个或四个内核(即 CPU),使多个线程能够同时执行。 在不久的将来,计算机预期会有更多的内核。 为了利用当今和未来的硬件,您可以对代码进行并行化,以将工作分摊在多个处理器上。 过去,并行化需要线程和锁的低级操作。 Visual Studio 2010 和 .NET Framework 4 提供了新的运行时、新的

一次性往mysql中插入10万条数据,只需7秒

不解释,直接上代码$connect_mysql-&amp;gt;autocommit(false); mysqli_query($connect_mysql,'set names utf8'); $begin = time(); $sqls =''; for($i=1;$i&amp;lt;=100000;$i++){ $sqls .= &quot;('......

插入10万条记录测试

通过前几篇文章,介绍了JadePool的许多长处,JadePool到底如何,需要经得起实践的检验。以下是插入10万条记录的测试情况。 硬件:笔记本联想G450 CPU:Intel Pentium T4300(2.1GHz) 内存:2G IDE:NetBeans 7.2.1 数据库:SQL Server 2000 表:       create table

在数据库中插入10万条测试数据

&amp;lt;?php $pdo = new PDO('mysql:host=localhost;dbname=你的数据库名','root','root'); $a = &quot;0000&quot;; for ($k=0; $k &amp;lt;= 9; $k++) {  $arr = array(); for ($i=$k.$a+1; $i &amp;lt;= ($k+1).$a; $i++) {  array_push(...

一次往表中添加10万条数据

你还为一次次编写数据而发愁么? 你还为如何添加10万条甚至更多数据而发愁么? 使用它就可以一次往表中添加10万条数据

任务,线程和同步(一)之Parallel类

1.概述使用线程有几个原因。假设从应用程序中进行网络调用需要一定的时间。我们不希望用户界面停止响应。让用户一直等待从服务器返回一个响应。用户同时执行其他一些操作,过着甚至取消发送给服务器的请求。这些都可以使用线程来实现。 对于所有的需要等待操作,列如,因为文件,数据库或网络访问都需要一定的时间,此时就可以启动一个新线程,同时完成其他任务。即使是处理密集型的任务,线程也是有帮助的。 一个进程的

Android sqlite 数据库性能测试10万条数据

package com.yfs.testdb; public class AppConstants { public static final String LOG_TAG = "testdb"; } package com.yfs.testdb; import android.annotation.SuppressLint; import android.

建议86:Parallel中的异常处理

建议86:Parallel中的异常处理 建议85阐述了如何处理Task中的异常。由于Task的Start方法是异步启动的,所以我们需要额外的技术来完成异常处理。Parallel相对来说就要简单很多,因为Parallel的调用者线程会等到所有的任务全部完成后,再继续自己的工作。简单来说,它具有同步的特性,所以,用下面的这段代码就可以实现将并发异常包装到主线程中: static voi

如何2秒批量插入10万数据到数据表中

注:此例子是基于我们开发平台的基础上进行java 上的实现。 ---------------

通过数组方式向Oracle大批量插入数据(10万条11秒)

http://www.cnblogs.com/cl1255674805/p/5130393.html1.创建数据库PersonCREATE TABLE Person( id number, name nvarchar2(200) , age number , sex nvarchar2(200) , password nvarchar2(200) )2.在数据库建立一个type,对应JAVA端要传

【批量生成10万条sql数据库数据+IO流的使用】生成简单sql插入语句大量数据,以及输出流生成文件2017年

第一步,建立一个java类,并且运行,在windows环境下 package com.test; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; public class GenerateSQLFile { public static void main(String[]

C# Parallel 循环多线程操作

using System; using System.Drawing; using OpenTK; using OpenTK.Graphics; using OpenTK.Graphics.OpenGL; using OpenTK.Input; using System.Runtime.InteropServices; using System.Threading; using System.Th

测试大数据(快速排序)100万条数据

该类生成了100万条数据。!!每条数据数据都是转型完成的10位的长整型并且该类还用到了了快速排序import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class TestWrite { public sta

java读取大文本直接插入Mysql数据库,10万条数据4秒执行完

java读取大文本直接插入数据库: 需求如下:  需要解析的文本文件是从考勤机中导出的1_attlog.dat,dat文件,根据项目需要,我只要2列数据,如下图 第一列在数据库对应的字段为 column3,第二列在数据库对应的字段为column13,测试的sql语句如下: -- ---------------------------- -- Table struc

多线程并发处理的新思路:Parallel的使用

今天偶然接触到一个新的知识点,虽然.Net 4 里面早就提出来了,但是我真的不知道,还一直Backgroundwork玩的不亦乐乎,这个Share出来大家共享一下 ~ 我顺便截了几个评论过来: 【我在最近的项目中用到了Parallel,原来的操作要10秒,现在4秒左右。不过还是不满意,后来加上缓存,就变成了0.4秒用Parallel有一个问题,就是CPU占用非常厉害,必须注意】

java 导入 十万级excel数据

java 导入excel,我导的10万的数据,没试过更大的,应该是没有问题

如何处理几十万条并发数据?

 数据并发:             使用存储过程+web   ervice   实现异步存取好一些,不过要设计好,要不然就经常死锁哈,这样可以快速的缓冲数据(因为几十万的并发数据一般都是比较大型的了,所以服务器是少不了的哈,所以就不要担心计算机的问题了)也可以及时的和用户交互,响应时间减少。   

用Parallel.For()和Parallel.For<TLocal>()方法实现并行运行迭代

一、Parallel类      Parallel类提供了数据和任务的并行性;二、Paraller.For()      Paraller.For()方法类似于C#的for循环语句,也是多次执行一个任务。使用Paraller.For()方法,可以并行运行迭代,迭代的顺序没有定义。      在For()方法中,前两个参数是固定的,这两个参数定义了循环的开头和结束。首先描述它的第一个方法For(in...

php+mysql中迅速插入百万条测试数据的方法(12s)

1.php代码 <?php $t=mktime(); set_time_limit(1000); $myFile="c:/insert.sql"; $fhandler=fopen($myFile,'wb'); if($fhandler){ $i=0; while($i<1000000)//1,0000,000 { $i++; $sql="$i\t'bb'"; fwrite

java一次性查询几十万,几百万数据解决办法

java查询一次性查询几十万,几百万数据解决办法 很早的时候写工具用的一个办法。  当时是用来把百万数据打包 成rar文件。 所以用了个笨办法。 希望高手指导一下,有什么好方法没有啊 1、先批量查出所有数据,例子中是一万条一批。 2、在查出数据之后把每次的数据按一定规则存入本地文件。 3、获取数据时,通过批次读取,获得大批量数据。此方法参见:http://yij

Excel导出几十万条数据

先上导出代码 /// /// 导出速度最快 /// /// /// /// public bool NewExport(List list, string filepath) {

如何将几十万的数据高效的导出到excel中

思路: 一、同步导出1、分页查询数据 2、将数据通过poi SXSSFWorkbook类写入excel,并可持久化到磁盘,防止内存溢出3、多线程 TODO4、导出时,通知用户,导出到哪一行了 TODO      a、可通过websocket通知      b、算法: (当前值/总大小值) *(100/100)      c、下载文件设置显示进度:https://blog.csdn.net/myna...

php导出超过10万行数据到excel

数据量超过10万,用php_excel导出很慢而且数据导入不全,还占空间,用csv格式导出,很快还不出错. set_time_limit(0); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="amazon_product_quantity.

10万以上数据查询-存储过程实现

需求:有如下两张表,其中tb_web_app表中数据有十万甚至百万,另,tb_web_app表中的c_category_code关联表tb_system_category中的c_code字段。 CREATE TABLE `tb_system_category` ( `id` int(11) NOT NULL AUTO_INCREMENT, `c_parent_id` int(11) NO

分页查询十万条以上数据的sql语句

普通的select语句当查询超过10万条语句列表时速度会严重影响,下面是公司DBA写出的优化版的sql语句 SELECT T.POI_ID, T.POI_NAME, T.X_AXIS, T.Y_AXIS, T.POI_STATE, T.POI_DESC, T.POI_ADDRES

绝对干货,教你4分钟插入1000万条数据到mysql数据库表

我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (4232009 > 4194304). Yo

poi导出大量数据(15万条没有问题)

1pom文件 dependency> groupId>org.apache.poigroupId> artifactId>poi-ooxmlartifactId> version>3.8version> dependency> 2try { String filename=new String("客户表.xlsx".getBytes(),"ISO-8859-1"); r

【总结】大规模数据(300万条)测试时,需要注意的问题。

前言 前两天,执行了一个batch处理300万条数据 程序执行了33小时11分40秒 并且产生了10G多的log文件   事前准备(数据导入) ①数据导入所采取的方式 执行数据数据插入时,我们选择的方式最好是批处理 写一个存储过程,来对数据进行插入操作。 在oracle下面,我们还可以选择sqlldr命令导入ctl文件的方式导入数据。  ②如何执行导入数据用的存储过程(

android查询几十万条数据的调研(一)

此次调研分两步走吧, 先从测试的角度看(一), 再从源码的角度看(二)(待续).

[小工具]急速文本比对工具,两个10万条数据的文本比对不超过30秒

为工作开发的一项小工具,特别声明本程序不是使用公司设备资源开发的,本人拥有全部权限。本工具为数据核对而做,特别适合于比对单据凭证号码,两个文本差异越小,比对越快。但是如果10万条数据,有1万条以上不一样的,那本工具将会很慢。本工具目前不能比对数字列,即单行数据必须是文本,而不能是数字。本工具用于解决excel 数据行不能大于65536的问题(excel2007已经不存在改问

2秒内向数据库中插入十万条数据?

原文:http://www.cnblogs.com/shixudong/p/3627424.html

[C#] Parallel.For的线程数

Parallel.For会自动判断同时运行多少个线程,但你也可以进行干预。

使用百度Ai处理过的情感分析样本

使用百度Ai处理过的情感分析样例,大概30万条数据(具体的记不清了,至少有10万条)

插入10万条数据

declare @i int set @i=0 while (@i begin    insert into table values(@i,GETDATE(),3)    set @i=@i+1 end

mysql快速导入5000万条数据过程记录(LOAD DATA INFILE方式)

首先将ids_app_installed_top_1000_3_ratio_wrap_m_top5000W.txt放入到数据库数据目录/var/local/mysql/data/${db_name}/ 下,并确保导入用户拥有这个txt文件的权限,否则会报Error 13错误1.${table_name}换myisam,我们的场景对事务没啥要求2.导入前修改参数和禁止索引更新mysql> SET S

Parallel.ForEach() 并行循环

Parallel.ForEach() 并行循环 http://blog.csdn.net/keyrainie/article/details/7679971 现在的电脑几乎都是多核的,但在软件中并还没有跟上这个节奏,大多数软件还是采用传统的方式,并没有很好的发挥多核的优势。 微软的并行运算平台(Microsoft’s Parallel Computing Platform (PCP))

C#一次性向数据库插入上万条数据的方法

一次性插入上万条数据的写法 1. [csharp] view plaincopy ///        /// DataTable批量添加(有事务)       ///  /      // 数据源       /// 定义数据源和目标源列的关系集合       /// 目标表       public static boo

ACCESS的真假:三、往一个表中插入10万条记录的速度小于插入1万条记录吗?

下面这个贴子中讨论了很多ACCESS中的一些猜想假设。Access或其它数据库操作效率问题.欢迎讨论http://topic.csdn.net/u/20090514/10/a93475bd-e67e-45c8-aa1e-87168ba36d02.html#replyachor引用 28 楼 wwwwb 的回复::比如插入10万条记录,速度 面对这个问题,第一想法上,在一个mdb文件

tbb基础之parallel_for用法详解

要讲解parallel_for,我们首先讲一个例子,该例子是对数组的每一个元素进行遍历,常规的串行算法代码如下: template void Visit( T var) { printf("%0.2f, ", var); } void Sequence_Visit( const float* fArray, int nSize) { for ( int i=0; i<nSize; i++)

Oracle批量导入100万条数据不到1秒

Oracle 批量导入100万条数据不到1秒

Embarrassingly parallel for loops

Joblib提供了一个简单的帮助类来编写并行化的循环。其核心思想是把代码写成生成器表达式的样子,然会再将它转换为并行计算:

有1千万条短信,找出重复出现最多的前10条

有1千万条短信,找出重复出现最多的前10条 解析:对于本题来说,某些面试者想用数据库的办法来实现:首先将文本导入数据库,再利用select语句某些方法得出前10条短信。但实际上用数据库是满足不了5分钟解决这个条件的。这是因为1千万条短信即使1秒钟录入1万条(这已经算是很快的数据录入了)5分钟才300万条。即使真的能在5分钟内录入完1千万条,也必须先建索引,不然sql语句5分钟内肯定得不出

php 导出几十万数据csv解决方案

   最近公司业务需求,需要导出几十万数据。原有的phpexcel 导出显然不能满足这个需求,其一:phpexcel 只能导出不到7晚点数据,其二:很容易导致内存暴增,导致请求报错。然后我在网上看到了这个文章https://blog.csdn.net/tim_phper/article/details/77581071。   解决的思路就是: 分批输出,不断的刷新缓冲。利用到ob_flush() ...

高效批量插入大量数据----JDBC-4

平安夜,只要像我这样的单身狗还在键盘前码字,其他人都去浪的浪啪啪啪的啪啪啪唉~苦逼 不说了,开始我的正题。今天要说的是如何高效插入大量数据,会对三种方法进行速度比较。 代码如下: 注意:为获得较为直观的感受,一下所有操作都是针对oracle数据库进行操作! 示例一:使用Statement进行插入(速度最慢的一种) /** * 向 Oracle 的 c

相关热词 c# 局部 截图 页面 c#实现简单的文件管理器 c# where c# 取文件夹路径 c# 对比 当天 c# fir 滤波器 c# 和站 队列 c# txt 去空格 c#移除其他类事件 c# 自动截屏
立即提问