C# 多线程处理问题!

问题描述

我需要利用C#多线程从一个文本文档中(10万行数据),读出每条数据,并交给一个方法来处理,本人对多线程不是很了解,不清楚怎么能控制每个线程读取的不是重复的数据,忘解答,最好有简要代码案例,感谢!

解决方案

解决方案二:
IO速度就是硬伤你开百万个线程读取速度也还是那样结果不仅没有加快效率反而还增加cpu轮询时间就好比你2M的宽带你开再多的线程也无法达到100M/S
解决方案三:
怎么又是多线程,究竟是谁给你灌输了多线程无所不能的思想?难道是蓝翔?
解决方案四:
2楼抱歉,其实我有10万条数据,需要挨着读出每条数据交给一个方法处理,以前的处理方式太慢了,希望找到更好的解决方式,因为对多线程不是很了解,所以才来咨询,如果你有更好的方式还望指教,谢谢!
解决方案五:
如果你有10万个文件,可以考虑PLinq处理。对于单个文件,读取其数据时其window驱动本身就是单线程同步的流操作,没有理由在读取数据流时考虑并发。假设说你的“处理方法”很很耗时,但是又并不占用cpu太多时间(而是因为别的因素而耗时),同时又是可以并发地处理不同的数据行的,那么也可以考虑PLinq处理。然而看你的简单说明,应该也不是,也没有理由在处理是考虑并发。
解决方案六:
要想改进一个算法或者系统的表现,不是不能从“提高并发处理程度”角度去设计。但是这需要从一定的深度进行设计,甚至重构。如果你只是很浅地说了“顺序读取文本文件,然后交给一个方法处理”这样一句话,就来直接空想“并发处理”,确实有些冲动了。
解决方案七:
读到不同的数组里面,然后再多线程处理
解决方案八:
生产者,消费者模型使用一个线程专门读文件,写到队列。另外一个线程来消费队列,处理数据。
解决方案九:
感觉楼上的思路可取,先把文件读取到内存里面,然后再用并行计算处理内存中的数据。百度搜索:并行计算。
解决方案十:
多线程似乎不能提升你的这个问题.试试一次多读几行.比如一次1000行数据,然后处理.另一个,你读取出的数据是怎么处理的?存放到数据库中?EXCEL中?这个存放也是比较耗时的,也可以考虑多条一次处理.这个我做过测试,存到SQL和EXCEL的时候,多条一次写入比一次一条写入要快很多.
解决方案十一:
引用3楼wjp16351的回复:

2楼抱歉,其实我有10万条数据,需要挨着读出每条数据交给一个方法处理,以前的处理方式太慢了,希望找到更好的解决方式,因为对多线程不是很了解,所以才来咨询,如果你有更好的方式还望指教,谢谢!

从硬盘读取是不能并发的,除非是n块硬盘,你处理一条数据要花多少时间?如果小于读取一条数据的时间,那多线程更慢。
解决方案十二:
数据有没有先后?要是有,用多线程还是要等前一条完了才能继续
解决方案十三:
如果是这样。1.建立filestream选择可共享读取2.多线程并行读取(不是用readline读取整行,而选择使用定点和相对偏移量读取,相对偏移量可以自己估算一下一行大概多少字节,建议稍微比这个大个3%左右)3.因为是这种方式读取所以需要你自己去判定一下硬回车位置,通记录一下这个位置当作下次的定点开始位置

时间: 2024-12-22 07:07:29

C# 多线程处理问题!的相关文章

Cookies,SSL,httpclient的多线程处理,HTTP方法

client|cookie|cookies|多线程 - 作者 sunggsun @ 20:26 8.Cookies HttpClient能自动管理cookie,包括允许服务器设置cookie并在需要的时候自动将cookie返回服务器,它也支持手工设置cookie后发送到服务器端.不幸的是,对如何处理cookie,有几个规范互相冲突:Netscape Cookie 草案, RFC2109, RFC2965,而且还有很大数量的软件商的cookie实现不遵循任何规范. 为了处理这种状况,HttpCli

使用Visual Basic 6实现真正实用的多线程处理

visual|多线程   事实上使用Visual Basic的ActiveX exe技术可以轻松的实现多线程处理. 原理先不说了,先举个示例,有兴趣的话大家可以一起讨论 1.新建一个工程,类型选择ActiveX Exe,工程重命名为TestExe在工程中添加一个Form,放上一个Timer控件.将Class1改名为clsTest,注意其Instancing要设置为5-MultiUse, 以下是其代码: Option ExplicitPrivate Declare Sub Sleep Lib "k

C#编写串口数据收发程序,收发频繁,求教多线程处理机制!

问题描述 C#编写串口数据收发程序,收发频繁,求教多线程处理机制! C#编写串口数据收发程序,点击界面按钮发送指令数据,等待接收返回的数据,此外还有周期性数据需要不断接收:接收到的数据要判断重复帧和是否是最后一帧,然后去掉帧头帧尾并显示在界面控件内:目前程序开了三个线程:接收.处理.发送,三个线程都是一直循环判断指针是否有更新,但这样导致界面切换太卡,请问该怎么处理这三个线程之间的关系才能使界面切换流畅呢,初学C#,如果能给出具体修改代码方法更佳,请大神帮帮忙啊~急! 解决方案 不要过度同步UI

mfc-MFC程序的多线程处理问题

问题描述 MFC程序的多线程处理问题 while(n<threadnum) { m_pthread=AfxBeginThread(ThreadImgProc,ImgInfo[n]); while(Tcount!=n) { Sleep(100); } n++; } 为何调用线程数量大于等于12个的时候会出错,小于12个则不会出错,我使用的工作站是40线程的.当调用线程数量大于12时就会提示MSVCR100.DLL模块出错.本人刚接触多线程编程,对此一点不熟,求大神解答. 解决方案 ImgInfo[

Java 多线程处理任务的封装

最近公司项目很多地方使用多线程处理一些任务,逻辑代码和java多线程处理代码混合在一起,造成代码的可读性超级差,现在把Java多线程相关的处理抽出来,方面代码中重复使用.抽的不好,欢迎大家拍砖 使用方法很简单,有两种使用方法 1.直接传递一批任务给到多线程处理方法,返回处理结果 代码如下: /**   * Created with IntelliJ IDEA.   * 测试多线程处理任务   * className: TaskMulThreadServiceTest   *   * @versi

Android 多线程处理之多线程详解_Android

handler.post(r)其实这样并不会新起线程,只是执行的runnable里的run()方法,却没有执行start()方法,所以runnable走的还是UI线程. 1.如果像这样,是可以操作ui,但是run还是走在主线程,见打印出来的Log线程名字是main,说明是主线程. 这就是为什么可以直接在run方法里操作ui,因为它本质还是ui线程 handler.post(new Runnable(){ public void run(){ Log.e("当前线程:",Thread.c

esper如何在storm下进行多线程处理

问题描述 esper如何在storm下进行多线程处理 最近在storm框架下用esper处理一分钟内筛选后数据. 在UpdateListener类内拿到数据(List集合),发现listener针对于同一个newEvents执行了5次.debug后发现listener有五个线程在跑,所以输出了五次. 因为是刚接触esper,所以想问下,这块对于esper在多线程下如何控制listener对于update方法内对于同一个newEvents执行次数问题! 十分感谢! 解决方案 http://ju.o

silverlight下多线程处理

转自http://www.cnblogs.com/xtechnet/archive/2012/03/13/2393821.html 如果直接按照下面的方式来走    new Thread(() =>            {                dosomething();            }).Start();   则会提示"线程无法访问". 解决方式到不麻烦.多线程处理,症结在Deployment    new Thread(() =>         

用Thread替代Timer——简单的多线程处理(一)

工作需要一个动态的窗口,有自动倒计时.后台发送数据.后台打印等功能. 第一版Demo采用了Timer作为后台处理机制核心,代码量少,可读性高.但是实际效果差强人意,特别是多timer阻塞的情况很严重. 总结了一下实际需求和后台事件,决定用Thread代替原有的Timer. 顺便一提,C#的Thread加上语法糖真是甜,原来需要写一大段的代码现在只要一行: Thread t = new Thread(() => void(parameter)); t.IsBackground = true;//设