有關讀取大小為11.2MB的文字檔案造成程式異常停頓的問題 |
尚未結案
|
Saladin
一般會員 發表:18 回覆:9 積分:5 註冊:2005-01-19 發送簡訊給我 |
各位前輩:
我有寫一個類神經網路程式是要把文字檔中的資料擷取部份並運行,
不過遇到一個難理解的問題是,不管試幾次,我讀的文字檔如果是11.2MB的話,執行到2回合,
或許也可以說是執行11秒程式就停了,而且感覺很像是當掉的感覺(在點選其他視窗再點選
回此程式的視窗時會有空白現象發生),但是因為我在程式裡有在for迴圈主體的最後放
Application->ProcessMessages(),因此本來是都可以觀察出現在狀況為何; 此外,我觀察工作管理員,程式佔有的記憶體是65MB左右,而且不停的上下移動(60~70),CPU使用率一直佔99%.
本來我也想說是自己程式的問題,但是在資料量為5.6MB時(刪去前面一半的資料),
卻能夠在65秒內執行完畢,當然資料量更少的時候也就更快執行完畢,我讀資料的方式是,
開檔讀取資料到Memo裡,
int tdlen=MemoData->GetTextLen();//training data length string td=MemoData->Lines->Text.c_str();//training data再用上面兩列指令讀取資料到td裡,執行程式時再從裡面擷取所要的資料 請各位前輩賜教了 |
chtai
高階會員 發表:68 回覆:238 積分:116 註冊:2004-05-21 發送簡訊給我 |
你把文字丟到 Memo 裡頭,還得花時間秀出來。
建議你用 TStringList,把文字丟到 StringList 裡頭,
然後做好所有要對文字的處理,最後再把 StringList 丟到 Memo 裡頭秀出來。
這樣應該會快一點 :) --
http://www.csie.nctu.edu.tw/~chtai/software.php
好用免費軟體的收集網頁
------
My Web: http://nelson.csie.us My Blog: http://blog.nelson.csie.us |
Saladin
一般會員 發表:18 回覆:9 積分:5 註冊:2005-01-19 發送簡訊給我 |
我的程式是執行到//2.訓練網路下面的
while(1){}裡面,都是在epochs為2時爆掉的
此button完整程式碼如下:
//基本資訊獲取 int tdlen=MemoData->GetTextLen();//training data length string td=MemoData->Lines->Text.c_str();//training data //td[tdlen]='\0'; td.insert(td.size(),"\0"); int a=td.size(); int innum=StrToInt(FormControl->EditIn->Text.c_str()); int hidnum=StrToInt(FormControl->EditHid->Text.c_str()); int outnum=StrToInt(FormControl->EditOut->Text.c_str()); char comma=','; twinRowNums test; test=checkTwoNodesNum(td,comma);//test trainingData double rmse;//RootMeanSquareError int digitLen=StrToInt(FormControl->EditLength->Text.c_str()); double la=StrToFloat(FormControl->EditLR->Text.c_str()); double rmset=StrToFloat(FormControl->EditT->Text.c_str());//rootMeanSquareErrorThreshold double rmsed;//rootMeanSquareErrorDifference double rmsedt=StrToFloat(FormControl->EditD->Text.c_str());//rootMeanSquareErrorDifferenceThreshold int et=StrToInt(FormControl->EditE->Text.c_str());;//epochsThreshold int periods=10; //不分類 ProgressBar1->Max=et; ProgressBar1->Step=1; Chart1->RemoveAllSeries(); ls = new TLineSeries(Chart1); ls->ParentChart = Chart1; gList->Add(ls); Chart2->RemoveAllSeries(); ls2 = new TLineSeries(Chart2); ls2->ParentChart = Chart2; gList->Add(ls2); //用於產生亂數的宣告 randomize();//每次取亂數皆不同 double lb=StrToFloat(FormControl->EditL->Text.c_str());//low bound double hb=StrToFloat(FormControl->EditU->Text.c_str());//high bound int precise=StrToInt(FormControl->EditP->Text.c_str()); double p=0;//前一個 //宣告常用的index變數 int i,j,k; double rTemp;//for rmse double prmse;//previous rmse float stime;//時間差 double hits; double hitRatio; int epochs; //暫存用 double sTemp;//暫存變數,用於累加(sum) char*cTemp=new char[digitLen];//用於轉換成浮點數(convert) int iIndex,oIndex; char c; int maxAnswerIndex; double maxAnswer; int maxResultIndex; double maxResult; double*rmser=new double[et];//Root Mean Square Error Records runtime ; //--------------------------------------------------------------------------- //0.檢查程式是否出錯 if(test.firstNum!=innum)//可能是input nodes跟輸入資料的數目不合,或是下面的狀況 { ShowMessage("警告:網路設定有問題,程式結束!!"); //delete td; exit(1); } if(trainState==2) { if(test.firstNum==0) { ShowMessage("警告:偶數列或奇數列的含有的數目彼此不同,程式結束!!"); //delete td; exit(1); } } else { //配置記憶體空間給weight bias陣列,並做亂數設定(0~1) fpw=new double*[innum]; for(i=0;i我想你的意思應該是認為我遇到的問題是讀檔讀到爆< > 不過事實上我是執行程式時爆掉< > 謝謝回應 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |