问题描述
while((input=sr.ReadLine())!=null){string[]ReadText=input.Replace("","@").Split('@');Global.text.Add(ReadText[0]);Global.text.Add(ReadText[1]);Global.text.Add(ReadText[2]);Global.text.Add(ReadText[3]);Global.text.Add(ReadText[4]);Global.text.Add(ReadText[5]);Global.text.Add(ReadText[6]);Global.text.Add(ReadText[7]);Global.Datalong++;}代码如上,用这个方法读txt文本,sr是StreamReader,Global.text.是个Arraylist(Global是我自己做的一个class,定义Arraylist的),说白了就是把txt里面的内容存到Arraylist中。读取功能没问题,行数少的文本读起来没问题,但是一旦用来读2MB左右大小的txt就会在while里面卡死,基本上在五六百行的时候就卡死了,不会报错,只是卡住了,求个解决方法。
解决方案
解决方案二:
卡住是哪一行呢,感觉不太像
解决方案三:
引用1楼tcmakebest的回复:
卡住是哪一行呢,感觉不太像
貌似是数据量太大了,我把代码改成了这样:string[]ReadText;ReadText=(sr.ReadToEnd()).Replace("","@").Split('@');Global.text.Add(ReadText);这回是运行到sr.ReadToEnd()的时候卡死了,不会报错但是卡住了不运行,我在监视里看到这个sr.ReadToEnd()提示了:函数求值超时bababa。。。。我怀疑是因为数据量太大了sr.ReadToEnd()处理不了,哪怕是一行一行的读txt文件,读到五六百行不一定哪行就开始卡机,但是cpu的占用率也没见增长。但是电脑的内存俩3.48G呢,读个2.33M的文件就卡机也不太可能,唉,搞不懂
解决方案四:
2.33M应该不会吧,把你的文件共享下,我试一试。
解决方案五:
先这样试:1.读取文件直接丢弃,不要放到Global.text中,看卡不卡2.做个for循环往Global.text中add数据,看卡不卡先确定到底是读文件的问题还是你自己的类有问题
解决方案六:
Global是一个静态类?
解决方案七:
直接readalllines就行了...何必一行一行的读...
解决方案八:
引用6楼diaodiaop的回复:
直接readalllines就行了...何必一行一行的读...
+10086
解决方案九:
感觉是你Global类的问题,把相关代码注释掉,单纯跑ReadLine试试还会卡吗。
解决方案十:
引用8楼sjyforg的回复:
感觉是你Global类的问题,把相关代码注释掉,单纯跑ReadLine试试还会卡吗。
会卡的,ReadLine五六百行的时候卡死,其实本来一行一行的读不会卡的,加了Arraylist之后才会出现ReadLine读取卡住的问题,我也去网上看了很多帖子和解决方法,我这个应该是数据量较大造成的,最好的解决方法是用分块读取的方法解决,但是分块读取的话我处理数据就不好处理了,所以干脆放弃了Arraylist,把数据用ReadLine拿出来后直接用。
解决方案十一:
引用7楼wawd74520的回复:
Quote: 引用6楼diaodiaop的回复:
直接readalllines就行了...何必一行一行的读...+10086
hehe
解决方案十二:
引用6楼diaodiaop的回复:
直接readalllines就行了...何必一行一行的读...
试过卡死了
解决方案十三:
引用11楼baidu_17673305的回复:
Quote: 引用6楼diaodiaop的回复:
直接readalllines就行了...何必一行一行的读...试过卡死了
虽然ReadAllLines用内存用的比流方式多,但2.33M真不是问题,这都卡死的话我甚至怀疑你的硬盘(光盘?)有坏道==
解决方案十四:
引用12楼phommy的回复:
Quote: 引用11楼baidu_17673305的回复:
Quote: 引用6楼diaodiaop的回复:
直接readalllines就行了...何必一行一行的读...试过卡死了
虽然ReadAllLines用内存用的比流方式多,但2.33M真不是问题,这都卡死的话我甚至怀疑你的硬盘(光盘?)有坏道==
这个可能性不大,新戴尔,挺给力的,打个使命召唤啊,鬼泣啊,极品飞车啊,效果都不错的说,速度也杠杠的
解决方案十五:
我也遇到了这个问题,我是卡在355行上,就不循环了,跟电脑没关系,我同事的电脑跑这段代码一样的问题,也是355行卡住
解决方案:
作为程序员,必须学会自己调试查找问题。你说的卡死是指代码运行到某次就执行不下去了?首先,确认问题是否是必现的?还是在读某一个文件时必现?可以尝试删除循环体内部的代码,看下是否会卡住。如果没有,就添加string[]ReadText=input.Replace("","@").Split('@');再看时候会卡住。首先,你要定位问题,明确问题。而不是出现问题了,却只能模糊的描述。你是写代码的人,更是测试出问题的人,如果你自己都不清楚,又如何指望别人能清楚呢。
解决方案:
别说2M几十G的文本我都这样读了也没见出什么问题来。。。。就你上面的代码根本就看不出有什么问题来没有上下文和有问题的环境根本就没法知道问题在哪里
解决方案:
引用14楼jiao_zg的回复:
我也遇到了这个问题,我是卡在355行上,就不循环了,跟电脑没关系,我同事的电脑跑这段代码一样的问题,也是355行卡住
试试自己写一个简单的txt比如每一行都是1111之类的不应该读几百行就卡死啊
解决方案:
楼主先确定一下是read的时候卡了还是add的时候卡了吧如果是read卡了,换一个txt看看是否一样会卡在同一行如果是add卡了,没一行少add一个,看看是否会卡在同一行先把问题定位出来
解决方案:
引用18楼u012948520的回复:
楼主先确定一下是read的时候卡了还是add的时候卡了吧如果是read卡了,换一个txt看看是否一样会卡在同一行如果是add卡了,没一行少add一个,看看是否会卡在同一行先把问题定位出来
谢谢,刚定位出来了,是org.apache.commons.net.ftp这个包下的FTPClient文件的一个bug,命名设置了buffersize,但是实际的实现却是从Util这个类里面取的一个final值,所以设置的不起作用了。
解决方案:
引用19楼jiao_zg的回复:
Quote: 引用18楼u012948520的回复:
楼主先确定一下是read的时候卡了还是add的时候卡了吧如果是read卡了,换一个txt看看是否一样会卡在同一行如果是add卡了,没一行少add一个,看看是否会卡在同一行先把问题定位出来谢谢,刚定位出来了,是org.apache.commons.net.ftp这个包下的FTPClient文件的一个bug,命名设置了buffersize,但是实际的实现却是从Util这个类里面取的一个final值,所以设置的不起作用了。
我写了下解决方法,http://blog.csdn.net/jiao_zg/article/details/51480099不知道还有没有其他的问题。。。先试试吧,反正是能读取了
解决方案:
http://blog.csdn.net/jiao_zg/article/details/51480099楼主看下是不是我的这个问题吧
解决方案:
新人来学习了。