2014-01-14 3 views
1

Я написал сценарий для чтения большой строки сверху вниз, а не слева направо. Когда я запускаю код, одно ядро ​​моих кодов процессора на 100%, а код никогда не заканчивается. Если я раскомментирую консоль.log, она выплевывает буквы медленнее и медленнее и привязывает все 8 ядер на 100%, использование памяти медленно поднимается до тех пор, пока оно не испортит все 8 ГБ в моей системе, а затем оно сбой с ошибкой OOM. Я, очевидно, делаю что-то ужасно неправильно.node.js: вложенные для циклов, операции с строковыми операциями унылые

var haystack = 'SRASBPETHWTWHDZVPOAECJHGNXHRKZXRBMSDYGZGNZBBCOKVPPJKKAQECOLGBFIIKTPVSROCCWWGRWDEQTNFSKEDNFBFKWVEELVTBULWROMGTXSASKCTFJQFDOGRNMZEBLFSCFAFWXZVRGFAZHERUTMOETZZRYNUHSRTHEYIVQDXFNWDDSLSSGPFOMYRHBGKONPIWDTZUBBRAJZGBVUGMVZZTPRAXMLZSXYELKJZWXUYUQIUGGHISZHIGSUQHGHTICVWIJVXMUXOQHPDESKSPRJHQVVTRTNQEVUWKGGQDURAXZWTMYUYIISIOXLTHCISFFSNHZMCGEWMOWCHRQKYNDTDLFWERZLEPRLTNZSPFEDCDESQVMLWMXGCXPMSPTJGSXTXINFADZTBUNDIQWOAIGFKQAJWHINHMZCZVMTJJWGTSGGOIBOZCJGVURJETNXSXWEDUNJPVLPZTDIMSIZGQUJALJYWVLRDYDRWVHZNUNKOLAUPTBMKUNFQYLVQKOQIPPWVNDXENRCVABOTNEKKJPURYNAWAGIZFEHYQMOFICBCQKELTMUYVQPYPZKVBYPTLXRLMYEXGAPRCWDJHQASDQHRGSTIYGMEAWOBLFPSDBGGXFBGIARMGLYOFCZXILLFLCVKCKCXYBTKIYRHLPWXBNGLJYVIZHWPIQSQLHURYRRTBTUBYRMMEQULVVJFKRRZTZVOIKNXPIICBQGFPTETWVPVUKEQOVTCOUARDTAVZFSZWBSTWTQEGLIDKUVMTFRXHOWPPJHCEWMTHJRKXENFENKDMPEYVNEMQRDBGZDIBVYCCFLFMFPSXHHADOZWMMOJKQSYNAPOKLUPSALZVKPKVBRIAFOXSECFCULWPFNPKFGIBPAUEXEOHLTRWTLJMHEMIXSVZVRYZQXCUGNZGDSLXJSROSBAIWPKQGICVKSMAVUHZPIQHDQGLSMJUQYYAZQSVORXLRNMEOYUFAKGKHJFKQPBYKDSLYHKLCEWAQINPRGOGVCQBAKTVDZZNRSIKZVSRMFCDJSANSGNQZPPEZSIZCSQCPMIRBKJZFKVRVVNOLDSYGFLMNJHCGUZDRVHTLSJMCHZCQJUURVMEFABDKQEFYXYZEQUOLEOZWXDXXOXIFPLTFBGTKYTBVSSTJESKVIMHJSUDVKRKOJYOGWIXLODESHRMPYBWKRPFEUGIYXXGHDVYXPUBVSQPHRUSSCQDHAXMJNUNSFGHZANXDFFXDETLXVAUAPOCASOTONXBXIYFMSMUUPFGMYKWVFGTTQFSNUDFTIRWSVVEQHPVFRYPLGPGIEUMSSFONCONOPHSDWGFBIGPEKQBRPZWYLZLKCMWFOKLNQBYJREVFRLWFBDVIVIIVZUTQZOLDSNDUISKYGJTIGWYUQBXXTAPQMKULPXGCYFMZLNQDAWOBWOVTKXOABKZRWAZUDYYTYNDQAEJHEDPOYUANKWMUATXGCRRGEKDVTIGTFLQHQVFJBRIFKYLHDJUXLAMVELRZPNBSEBQUVHARMKVCLLDHHYYQNTXFIMFKRIMTJUEJOWIEIETZDADSGNJFDGGWKRJUXQXXKLOUSYMCTHLYIXSICFCRHFCXUSFOMCVSVYIIMCNEGHRMCZKWXPHFAMCTCBEBHQOBDXHAYNSVVZWAGTEIMVWRCCPNCCQGUWXIGCPZERUVJRQIZQYSMAUNHCVNROCDFORLNOWTLVTHADALVCOISZDFKNFMXQBMVUMFDFKDGNRQKZPXDJNZODBXFUAGEPCEQSLGAOSQZUHJXEQFTRLAWZUUROTADFEXJBGJCOPLRNLLHVTNPNPHJDYWEGBKVOZOFDYMYMHUNDMLIZOCLODMRBZORXZVTUAIDXZIGOLLMGUJLSOHSVDFEMDTXEUMIOITNSXVNXUWMNPFITZXAJBKUVMNLUOONUDQSWYUCZOZXOXAFRCWVMMBLFCPPHFTLEKHXQNWYMQYDLGHTSSGDCFIRSMVTJFKPLVLBWIFWBJQTKXBIMLRTGNABJDXWIEFLVCDLQTSWURMBASDXNXHBQTEBCUTGWVTHXDHRJYZZKNQEBPXRYMWAXEGRSRUCQHYIOVOYJUXPANVEAJEUKKYAWEZSPZYCQPPWXVNNPHIVSHSSYVJLUNDXAFPCXLOOTRYVLVGNIQVPZLBXAPWQGSCCXINWFTIVFGLMUTPRWQFJORMQYYIUUJZRLLFXATWFRCQDKDIFXZHCWJGYEROPRQTJGJJSTRRKAMAGGMZKKOPXYKUSNZVVHHNRAGAGWXZOIYKVMAQJELXWGUEWMTSJMOEZRUEGUBZELODZNCDASJZGOTXYZGVTVMRTVVSWHFEFVUJPCCGEJXWYYLBVZGIGCHRNQOEDELTDIUZPAGGJYPCEEKZNQSMDKNMRZFVBPLIRBFCCVLUGCVPLOPCWDZJZAMKFKRLXTKQJIZSNAQFUXMCLXPTBKNNWWKKBVLYQPFHVEHGXQEHPOWRIIWXGKVBFMMDOJNFMCCNWTALOTLCMFKXKGIKYHQIOUJOAIXEFIMWMKCTABKRCVTAFDLWIQFDUEYDOBFJOKXBKIIBCVIVILAWTFXHLUVTMGQEJEVKBAVMITJPVRGRCDSFLPXRFWGAJLGMSPAOUVMDUBXYWEOVMDNUOIMXGEVNKCALLWPPMNNMFOVTZOAPSDJFZECSDIHKXCYJCAGYKLPOWFTVSRDSBSGGWDNFSTRZQYKMOUDNTRGXFKJBLOECLUJQGRQWGUETMKOGUWCAHDHGGCBSWXTXMLJMJFJTKURTTCXNOOEBYYUVKPWXSNUKVCZOXJOMXXCLTZWBUDYMEJNTIPBTWJKJJLYQFGYRGYFUCTAICLKBYEHONSPSMXLLMZCMJQVOGKEZOYBDJIUHAFGCEIAPXAQVGSBIJVUDHTWPPEKMWWFEUCAQWFRHLCFTLPXVJNKFCTEXGKPZXQXOBKPDWOAFOZTBYGDVFAJXMQOHAPTLSNLKJIGZRFSBGMQBNBAHELRDEWUEWQVKVYZBPGQVOWYKZEGLJRLYHBETRZTEWBTGJBRUTBKNDGEAQEUTLZZSAMCMMVJWBPDKOSGPLVUKPZAQGJDKUIIPCVBOIBCXRAAANQSCBBYQNXRTCRNHJGMRYICLHDBXVXEGBFAEXOAABYDXFQTKPXVMQPHXLTXCVMLXDJPULJNOGVZFMYIRBFIEESIEJDBLYPARQERLKUEHYUGJIRKVQEFZLQUQXSKRNBZURWPLZSTPXISSJLUFZSMFXZIVESRSKEDNJEPGVPUBHLGWTKISYYJVQHXPHJDWDWQMAQWTZIBKCHEAETDYBJETTGZYHUURVERLLSCKUHSJMOAXTRYGKDXGISNNAHVQTEZKRKWAMMHAJGEJZOWZNEIZLZSSGLDGHXNEJPUBPPXNLJCKBFYDGXUPXITFATASDFNSHKWNZMQGXBBOSHEWBOWWCFKDCWVKWOTKMNEGJNOPURJJWAFPQOLNGBMAUCITMGZBOQIEUJEIOSNSMYQJTGVPFGXWCCCKDRRVDIHDYCTQHESHCTUUSSVQWMWTAOKIJALBPMGBEXZQFRIKAQVWBUXUNKBYMYSEXBNZHFHUSFGSKRQYZVKTALOHBMXSGHRUDUYSSMWFMPMMWFXCPISMWXIFEQSWTQQKUMZGOANSOASHGJBEKWLJBXENHHBWQQUCRQYNAATEWLTESGXPCWYFVQGGXTTPIBWSYRXBQGDXJMZFQRYDPKFPNYRQEFGFSZBGZRDVLHSYXTRTXFOIQIYBPFEXQDXBEPJNDPPBICIRTBBTLQUALXYUWPUDBVMJSOJPNEGIWXGCBFDZZSKWNAUIAXOVJJWULADOMBTGOTCIAYLIAGYTVVBZVVMYBWAJYQYCTNHUXYINPLAEIJCECYYBFIMUXXDGRKJADAFWWQKVSKLWKGPJPFZDCWNIHLERAIXHDIIIMDQPFTZVZTWYXYCUOCFFEYPBZRTSCPUQMWXGZVYCKTEVNJPBDUBXIUSUOOGGYGRTGAZTYRCGBKJFGXBRMDQGZXIGZDJCHWFORQKJJGUJTRIGIKOBYSRTIOUIAZWVHAWISDDWTICHGVEHSUTDFTGBIJUMXLNHLVXBOFPCEUOWQRDIELVYBAOAWLRCBJVKJCXYPJPGIJGNGJYUVFDNDCDBQXQMRYLIHDKYQHGBWBZOAOXPMALQZEWAAHGMSLSROAJPLGSIKFUSYRDJPQCOOQJTJVNPLIHJECIFUHIIEZYMJCQTCKUHSCJMUVDEZIMFEGOMRHVUVIVGMBERRPLGKWWOPLKRQIWJRZBYOSXROTLBUDGLWGKKWANWWIWJNQDCVOBSIPNXJEHKNUHSXCXDCCRSNBYZVXBUOAETHRQYYVQGLXWBWXYDRBFSBCNOSJHGTNSCIAXPCLOACAQGCBTXZGTCIDNGLAZCWXIFWKDYJWBKXDEUJZPQRLWASIKLSLFMERFKPXQYQFIRYHHUXSCWVLQZGSMLZUYOAFCUHMJIVDOEBHDKZYUDADMCHXQYIKUMKAPRPWSGDMNAGCSOOVPSCSWCENPBOCCJQXPBBDEHHVUVTFSLHGTKHASWGOUUQEDZYJOXUXELQAMKVNGAAJXMAHKARSLPRZGTDBKPRCXYHWWHWRRXXPRFKMJJNEYGHTMWCTNBQRCUAJPPPLPNJETEYDBRMLEIKLKGLJMUBPRLWIFEOOQCBGNOVMLMTZGYCGMSLCTKBVHJGUZLGYUJYXONOPRHMJEAHICJRUXILJAGNHHJXSLJTVMGGRNVKTDOJVHHXWZVJIEJCPPVKAVHWPCNBZTIMNVYGAKBJIGBNMLRAYUAHKJWCOISZHMGONXQAXWJZVQOGQUGAKJEXUNLTCDYRQWDGGOUUUUHWPRASTBFMSYGROSNLXLENLVETJKKSOLSMHVEUQRLJUDAMKJLWECCIHTUSPPTVXUVZZVDUVPVWNQUPLIHVDPUQVUIIGIYCFUANGHNOWQMSOQOMHLQNIKVQBGOQHHZFVCLPIYOXHIAXDLRZJGXAIJYNLVXEIAAIZXCUITPLABHDPJYZEOACHCRYUZNYNHPJPOPPGEKXJAAZLGPXJSNHNSQSPJRXZGYGSNDUWNJCQNPLJJGKIBUXGSPGUXZAWHYBWCDSQPWVTBCVDQRDXMXBMDVRXLPHGUFSTQPXOLOFIZKFDLJSUUUXCINQOYFULWDNUZCRJIOSRMOWVMMHNYNFBUKYXEFLIPBFEDPFJGHFXQYVUZBUNUJDLSWYREVCKMVQQVAATSRNUOSNABSMXRFVVMVTXITIYWUKTCDNZPYUGPPQOQRPDFMVUXMTKNZQWOJHWELRFYDFKTBGVVSZNBTDNPBFHAKKUFHZVUXRARYEKWUCYQXLIWONVNBYXNAQZBTVGWIDGTAWFBRMRVVKYAXJOTYYSQXZAJEOWWCOJXLBWSXGODJSUEOMYXHPUEPDYLWYJNDISRWYYFAGYMVSXPTGTTVWTFBSTFMFCYRLFISMGKAZVQBSNISILDCSLUGVWBBKWAXOPTHPJQFBTONDUMCCNEDSRBYOCIAMTLBAVESZQEAHGNFADENFWGWIGAQTOCSNXNSZNEVJMHVENBGUOOMMGCBGJBCPQPYMBHDKJPQDBLAMLLSGUEEFLNGNZJFQFZKONNDHXIUJDMBUNOVWSFBBJWRHIJSTMSQNSFPDJAXRARKGEDQDHWGZQWZRWPLWAUPUIGUXPAXHIKPDJLCQOMHRYRLJYOCSNAWRNCHSXHJTKNGMHYOHRFIYQJFSPJOMYBUPHUQJRWNQEESRWPGJKHZRNDZBQIQBNFSIAVIBDEWWSDRATKVZPBTTHJYASFTUCIIHZQTXEOTLJSVTZQWALTTBGQLPFSYITRVWMKCJOZWONQSZTPDLXESINYENYTAZYPVZPDBYGFDGEZTJPZVZDHTRKOTGZELUGEWSMYZFOSQEZNNSCVKWXCKBDDRMWFWUBJJHTVQVPARGEFMXCCKQLCOABKJYOKUPJYQNMKNDBNROJDPUANZUTBZRKPCOFJHKHJQWQZMNFOLTJVODPWFPJOEYBLPIOIWFQOETPAAZEHMYSNMSSFSTIWOZRTGGXHDKJPOKCDUCFOZJNQAUUZJONRAOJHVPQDMUHNFRBHECDFCAOLXXQBDEPIZWQHMONFDLDQDAHAZRHGJTXVUPDPZVNHJHSGBPMVFVAHYUYKRPQVSTNSQXEBMSSKJBYQKBXWSNAQZJSYPQDCRFORMTTBVWUBPYIXLLMZEOMAELSCBIMRASXWFFFFZDHEUDIRZKJMNNENEARMVLNGYGJMCAOWYICCTRIQUJAWWLAPFTBJGHHEHBVQJNIDKAGMPOLTZIKEEBQTQHFVDIAHJEZMIFWPMXTEHJQKGMHMMYPYQCARDOZERLTHGYWWJJEILSYLISWVPRSCIUXVXKSQWLKTRCWUURCLGXYQQXWQVOWXTLURZIKQRJXTPNWRNQAYMIMMUXCTZREGGHFXMMAAHZZMQIEQGBHORJGAAZAJNZIDKKXZIRRTUASAEOBPBWYDUCUILWFEUMSBCPWWMNDCEFNSDJBGVDYUOUPPLEMTQLOLVXLPFNMYNCTSSIJRLQDOWSUEREYCVPKJVBTAVKEANLCJVZHRUIOEWBCUYDLEYYDLYEYYMOUTROZIGJRHRNLISBLUGUNLZZLNHIWTDNGRLAVPOLOYSMTTLLPKDLQWNSXMIDXBHAXYEMRPYONJVJLYPFLMLOSLWTRMSHLYMSRJHXKXRGWGAIXBUCWRXCGEUWYUIUSQQPWKMHHSBDFSYZKOSQZXXAVXXXJKFCNIGXEQZNBBKEKCQOWQGQHTUIPEYUFJARTKKFHDOUHLHUZZFXLWHIOOIGKNPAXEXDNWIUQSOSBHDEQLKPLIRUQMUBHSQIGUNJSBWHLBFSUOTNJZWQDDXETAQNDYADEIGPJEBVGIDGLVDMIECXNUIELRZAUFRBSMNPOGJHHCDAVVKIYEOWLLAVCUZOCBDKPAPCUVHWXUQSUASGIBQAOROBZLGTAMIHSHOWXPQBVFCOSNQLMFGEZAZRXTIHWDWXATHYUAIDPSGBPUIVVROEXXUHHVCCCMNXFGAQIJNNVZHBEWULPGLYJHLRBFGPPJCAIAFKALYQDWBFGDYRCOQGXZLVLSMMDXEKDCMQIQBQVRGVHTYUZTHGATYRZVIGUMKADPIGSIFJZCKKJHEONIKRXKOPXAGMWBMHVPVPDWRADGMTVERKRWSSVLVFIJGMUBZTRSPNGDLFRBXGMHNEOJCMPFOAPWEPLGRABYLLXDLTERRBKDBVYGQNDYYNCHLWDWWYLLVQBOVIHFJLFVTMKDVINYKKERJKSCZTZEKQSFOSMPNVGSNQSQNDAVQJNNLQHJLBTXPZBXFYRRACYWMCKFORKWGNJCLFIXCIQSPWUWTRLJSICZVKZDAIQTURXNBGDLIREHDLDUCDNDXNSHRCLQLATVPHOZRTIXXIQYEJSARNKOOYIIFVLEGISMMEQNCMAKQLXRQRNEKMGFLCNCJWCTRDMEIFCZVJGTLGWDSTBSEUKVWEIHOHMSZKXUCCVHACKLKQJQSXKUJXPTSHKYRMUADWABQSVKIPFRPTDASYVGJXXMSHFNGRDXIQFGCUGHLKOWXPJETKDWUZHZFKEDYTKZEUUQDIJMWKYUVDYZPTWSHNJDBLZMNOTKGCWFRASJBPQYPTAKPDBFPFLZCEPKPTHTQAQVMMFXUUNEGOJOYRCSBIZZPEREIYMQYMBJIDTYCJAJVIQGHLHVYVLFXRJJWEJJEGVJOYCBVQEVXKEDKLRFSOMXWEKBCHEMLCIVTZXXTJOXHPZAIMBTJBHVSOGNWZBRFABAINEEBPWNYSBENBURPTRCAYWKCQCNZXWKRWVLVTHJWSOBEWANCJSLRWZOBPNITSTYNTVJJZNCNSPCFDQQNAMMQPVPQWTBPSAMWZECDXXCKBBEQKSKLALCZRZCNFDYOXEAYHHKRNF'; 

for (var n = 0; n < 64; i += 1) { 
    for (var i = n; i < 124*64; i += 64) { 
     //console.log(haystack[i]); 
     var vertical = vertical + i; 
    } 
} 

console.log(vertical); 

Но что? Я делал другие (indexOf) операции над этой большой строкой, и такой же большой массив и производительность были в порядке. Является ли это гнездо для цикла неприятной работой? Как я должен писать?

+3

"привязывает все 8 ядер @ 100%" странно для однопоточной программы. – djechlin

+0

Вот что я подумал. Я предполагаю, что console.log получает поток для каждого выполнения, например, операции с асинхронным файлом делают –

ответ

4

Это не имеет ничего общего со строкой, вы даже не обращаетесь к ней.

Вы испортили свои индексирующие переменные, и цикл никогда не заканчивается. Нигде вы никогда не пытаетесь увеличить n, так что он сидит на 0 навсегда.

+0

Я вижу это! Благодарю. –

0

В первой строке у вас есть «i» вместо «n». Это означает, что вы никогда не покидаете внешний цикл.

for (var n = 0; n < 64; n += 1) {} 
Смежные вопросы