C# 实现多线程批量数据处理

简介: 应用场景分析:假设有一组已知数量的数据,按照一定的业务处理规则处理并保存数据库,如何提升数据处理的效率并完成数据保存(具体情况具体分析)?此处使用控制台方式模拟输入数据(类比保存数据库处理)...

应用场景分析

假设有一组已知数量的数据,按照一定的业务处理规则处理并保存数据库,如何提升数据处理的效率并完成数据保存(具体情况具体分析)?此处使用控制台方式模拟输入数据(类比保存数据库处理)。

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
 
namespace ConsoleApi
{
    /// <summary>
    /// 多线程批量数据处理
    /// </summary>
    public class MultithreadBatchDataProcessing
    {
        // 线程安全队列
        private ConcurrentQueue<ResponseModel> queue = new ConcurrentQueue<ResponseModel>();
 
        /// <summary>
        /// 模拟设置数据
        /// </summary>
        public void SetData()
        {
            Console.WriteLine($"开始数据设置,时间:{DateTime.Now};");
            for (int i = 0; i < 10000; i++)
            {
                var model = new ResponseModel { Code=i, Msg=$"第{i+1}次循环", Data=$"产生随机数:{new Random().Next(1000,10000)}" };
                queue.Enqueue(model); // 模拟数据入队
                Thread.Sleep(1);    // 这里是随机数生成时需要
            }
            Console.WriteLine($"10000条数据设置完毕!时间:{DateTime.Now};");
        }
 
        /// <summary>
        /// 多线程处理数据
        /// </summary>
        public void MultitDataProcessing()
        {
            int threadCount = 10; // 开启 10 个线程
            for (int i = 0; i < threadCount; i++)
            {
                string fileName = $"task{i}.txt";
                // 开启新线程
                Task.Factory.StartNew(() =>
                {
                    var sb = new StringBuilder();
                    int j = 0;
                    // 数据循环出队
                    while (queue.TryDequeue(out ResponseModel model))
                    {
                        // 处理数据
                        if (model != null) sb.AppendLine($"==》Code={model.Code},Msg={model.Msg},Data={model.Data}");
 
                        if (j % 100 == 0 || (queue.Count.Equals(0) && j < 100))
                        {   
                            Console.WriteLine($"每100条输出一次控制台,并暂停100毫秒, 第{i}次文件:{fileName}");
                            Console.WriteLine(sb.ToString());
                            sb = new StringBuilder();
                            Thread.Sleep(100);
                        }
                        j++;
                    }
                });
            }
        }
    }
}

模拟多条数据批量处理

模拟 10000 条数据批量处理,每 100 条数据保存一次,调用显示如下:

var mbdp = new MultithreadBatchDataProcessing();
mbdp.SetData();
mbdp.MultitDataProcessing();

image.png

C# 多线程批量数据处理演示 Demo 完毕。保存数据库(MS-SQLServer)时可以创建 DataTable 采用 SqlBulkCopy100 条推入一次即可;

目录
相关文章
|
6月前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
198 3
|
2月前
|
XML JSON 数据处理
C# 中的 XML 与 JSON 数据处理
在现代软件开发中,数据交换和存储需求日益增长,XML 和 JSON 成为最常用的数据格式。本文从 C# 角度出发,详细介绍如何处理这两种格式,并提供示例代码。对于 XML,我们介绍了读取、创建和写入 XML 文件的方法;对于 JSON,则展示了如何使用 Newtonsoft.Json 库进行数据解析和序列化。此外,文章还总结了常见问题及其解决方案,帮助开发者更好地应对实际项目中的挑战。
177 61
C# 中的 XML 与 JSON 数据处理
|
3月前
|
数据采集 XML JavaScript
C# 中 ScrapySharp 的多线程下载策略
C# 中 ScrapySharp 的多线程下载策略
|
2月前
|
消息中间件 安全 大数据
Kafka多线程Consumer是实现高并发数据处理的有效手段之一
【9月更文挑战第2天】Kafka多线程Consumer是实现高并发数据处理的有效手段之一
249 4
|
2月前
|
安全 数据库连接 API
C#一分钟浅谈:多线程编程入门
在现代软件开发中,多线程编程对于提升程序响应性和执行效率至关重要。本文从基础概念入手,详细探讨了C#中的多线程技术,包括线程创建、管理及常见问题的解决策略,如线程安全、死锁和资源泄露等,并通过具体示例帮助读者理解和应用这些技巧,适合初学者快速掌握C#多线程编程。
78 0
|
3月前
|
消息中间件 安全 Kafka
"深入实践Kafka多线程Consumer:案例分析、实现方式、优缺点及高效数据处理策略"
【8月更文挑战第10天】Apache Kafka是一款高性能的分布式流处理平台,以高吞吐量和可扩展性著称。为提升数据处理效率,常采用多线程消费Kafka数据。本文通过电商订单系统的案例,探讨了多线程Consumer的实现方法及其利弊,并提供示例代码。案例展示了如何通过并行处理加快订单数据的处理速度,确保数据正确性和顺序性的同时最大化资源利用。多线程Consumer有两种主要模式:每线程一个实例和单实例多worker线程。前者简单易行但资源消耗较大;后者虽能解耦消息获取与处理,却增加了系统复杂度。通过合理设计,多线程Consumer能够有效支持高并发数据处理需求。
166 4
|
3月前
|
安全 C# 开发者
【C# 多线程编程陷阱揭秘】:小心!那些让你的程序瞬间崩溃的多线程数据同步异常问题,看完这篇你就能轻松应对!
【8月更文挑战第18天】多线程编程对现代软件开发至关重要,特别是在追求高性能和响应性方面。然而,它也带来了数据同步异常等挑战。本文通过一个简单的计数器示例展示了当多个线程无序地访问共享资源时可能出现的问题,并介绍了如何使用 `lock` 语句来确保线程安全。此外,还提到了其他同步工具如 `Monitor` 和 `Semaphore`,帮助开发者实现更高效的数据同步策略,以达到既保证数据一致性又维持良好性能的目标。
46 0
|
5月前
|
并行计算 算法 C#
C# Mandelbrot和Julia分形图像生成程序更新到2010-9-14版 支持多线程计算 多核处理器
此文档是一个关于分形图像生成器的介绍,作者分享了个人开发的M-J算法集成及色彩创新,包括源代码和历史版本。作者欢迎有兴趣的读者留言交流,并提供了邮箱(delacroix_xu@sina.com)以分享资源。文中还展示了程序的发展历程,如增加了真彩色效果、圈选放大、历史记录等功能,并分享了几幅精美的分形图像。此外,还提到了程序的新特性,如导入ini文件批量输出图像和更新一批图片的功能。文档末尾附有多张程序生成的高分辨率分形图像示例。
|
4月前
|
设计模式 安全 Java
Java面试题:如何实现一个线程安全的单例模式,并确保其在高并发环境下的内存管理效率?如何使用CyclicBarrier来实现一个多阶段的数据处理任务,确保所有阶段的数据一致性?
Java面试题:如何实现一个线程安全的单例模式,并确保其在高并发环境下的内存管理效率?如何使用CyclicBarrier来实现一个多阶段的数据处理任务,确保所有阶段的数据一致性?
62 0