您的位置  > 互联网

写入MSSQL数据库的实现方法与方法

MSDN是这样描述的:

该类是线程安全的先进先出 (FIFO) 集合。

的所有公共和受保护成员都是线程安全的,并且可以同时从多个线程使用。

总共使用了两个线程,一个用于读取,一个用于写入。

实现方法:

(先进先出)收集:

ConcurrentQueue DataTableList = 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盘-百度百科