MSDN是这样描述的:
该类是线程安全的先进先出 (FIFO) 集合。
的所有公共和受保护成员都是线程安全的,并且可以同时从多个线程使用。
总共使用了两个线程,一个用于读取,一个用于写入。
实现方法:
(先进先出)收集:
ConcurrentQueueDataTableList = new ConcurrentQueue ();
读:
1 private void MainThread() 2 { 3 if (DataTableList.Count写:
1 private void Thread1(object state) 2 { 3 var dt = (DataTable)state; 4 MsSql.Insert(dt); 5 Console.WriteLine("Write {0}", DateTime.Now.ToString("HH:mm:ss.fff")); 6 OK_WORK_COUNT++;//已处理任务数+1 7 //从任务队列移除 8 if (DataTableList.Count > 0) 9 {10 DataTableList.TryDequeue(out dt);11 }12 }读取MySQL数据库的方法很简单:
.Fill() 方法填充数据。
写入MSSQL数据库的方法也很简单:
.()方法批量插入数据。
经过多次测试,程序的优化基本到位,但是我知道肯定还有需要改进的地方,还请各位专家给我一些建议。
主要的性能瓶颈仍然是I/O。 让我们以我自己为例:
HHD用于在本机上存储MySQL和MSSQL数据库,无论是哪一种,数据迁移程序也放在HHD中。
一次读写5000条数据,单线程测试结果为:41分31秒。
在本机上创建 RAM DISK 以存储 MySQL 和 MSSQL 数据库。 和往常一样,数据迁移程序也放在这里。
一次读写20W条数据,单线程测试结果:3分11秒
改成多线程同步和线程安全后,一次性读写了20万条数据。 多线程测试结果为:2分11秒。
如果读写数据不需要按顺序,可以完全丢弃,以达到更高的效率和更快的读写速度。
如果不设置为on(事务)的话,还可以快一点。
如果写入目标是数据库,平均写入速度比MSSQL快0.1到0.35秒。
当然,无论怎样,实际测试数据和我公布的测试数据是有差异的。 毕竟使用环境不同。
此测试结果不专业,敬请见谅。
示例源代码:
笔记:
FIFO:“先进先出”是一种调度算法。 它描述了队列使用的先来先服务的服务方式:先进入队列的工作将先完成,后进入的工作必须等待。
请参阅英文维基百科:()
中文版维基百科太简洁了:先进先出
HHD:全称Hard Disk Drive,详细信息参见:硬盘-百度百科
RAM盘:详情参见:RAM盘-百度百科