Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re: Perl Program - Out of memory?

by BrowserUk (Pope)
on Nov 15, 2013 at 19:44 UTC ( #1062778=note: print w/ replies, xml ) Need Help??


in reply to Perl Program - Out of memory?

It is impossible to suggest anything or even speculate without seeing the code.


With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.


Comment on Re: Perl Program - Out of memory?
Re^2: Perl Program - Out of memory?
by jdlev (Scribe) on Nov 15, 2013 at 20:07 UTC
    Sorry...here's the code...should of thought of that in advance I guess..
    #USAGE EXAMPLE - Max Points Replaced If Higher Value Found require 'funcs_top10.pl'; $delay = 3; $maxSalary = 100000; $programStartTime = localtime(); $qbHash = getStats("QB"); #Sorts Player Statistics Into Hashes + According To Position $rbHash = getStats("RB"); $wrHash = getStats("WR"); $teHash = getStats("TE"); $dstHash = getStats("DST"); $flHash = getFlexStats(); foreach $key(sort keys $qbHash) { $QB1i = $qbHash->{$key}->{PlayerID}; $QB1s = $qbHash->{$key}->{Salary}; $QB1p = $qbHash->{$key}->{FPPG}; $QB1pos = $qbHash->{$key}->{Position}; #print "QB1 count = $qb1count \n"; #$qb1count++; foreach $key(sort keys $qbHash) { $QB2i = $qbHash->{$key}->{PlayerID}; $QB2s = $qbHash->{$key}->{Salary}; $QB2p = $qbHash->{$key}->{FPPG}; $QB2pos = $qbHash->{$key}->{Position}; #print "--QB2 count = $qb1count \n"; #$qb2count++; if ($QB1i != $QB2i) { foreach $key(sort keys $rbHash) { $RB1i = $rbHash->{$key}->{PlayerID}; $RB1s = $rbHash->{$key}->{Salary}; $RB1p = $rbHash->{$key}->{FPPG}; $RB1pos = $rbHash->{$key}->{Position}; #print "----RB1 count = $rb1count \n"; #$rb1count++; foreach $key(sort keys $rbHash) { $RB2i = $rbHash->{$key}->{PlayerID +}; $RB2s = $rbHash->{$key}->{Salary}; $RB2p = $rbHash->{$key}->{FPPG}; $RB2pos = $rbHash->{$key}->{Positi +on}; #print "------RB2 count = $rb2coun +t \n"; #$rb2count++; if ($RB1i != $RB2i) { foreach $key(sort keys $wrHash) + { $WR1i = $wrHash->{$key}->{ +PlayerID}; $WR1s = $wrHash->{$key}->{ +Salary}; $WR1p = $wrHash->{$key}->{ +FPPG}; $WR1pos = $wrHash->{$key}- +>{Position}; #print "--------WR1 count += $wr1count \n"; # $wr1count++; foreach $key(sort keys $wr +Hash) { $WR2i = $wrHash->{ +$key}->{PlayerID}; $WR2s = $wrHash->{ +$key}->{Salary}; $WR2p = $wrHash->{ +$key}->{FPPG}; $WR2pos = $wrHash- +>{$key}->{Position}; if($WR1i != $W +R2i) { foreach $k +ey(sort keys $teHash) #TE1 Start { $T +E1i = $teHash->{$key}->{PlayerID}; $T +E1s = $teHash->{$key}->{Salary}; $T +E1p = $teHash->{$key}->{FPPG}; $T +E1pos = $teHash->{$key}->{Position}; fo +reach $key(sort keys $dstHash) #DST Start + { + $DSTi = $dstHash->{$key}->{PlayerID}; + $DSTs = $dstHash->{$key}->{Salary}; + $DSTp = $dstHash->{$key}->{FPPG}; + $DSTpos = $dstHash->{$key}->{Position}; + + foreach $key(sort keys $flHash) #FL1 Start + { + $FL1i = $flHash->{$key}->{PlayerID}; + $FL1s = $flHash->{$key}->{Salary}; + $FL1p = $flHash->{$key}->{FPPG}; + $FL1pos = $flHash->{$key}->{Position}; + if (($FL1i != $RB1i) && ($FL1i != $RB2i) && ($FL1i +!= $WR1i) && ($FL1i != $WR2i) && ($FL1i != $TE1i)) #FL1 != If Start + { + foreach $key(sort keys $flHash) #FL2 Start + { + $FL2i = $flHash->{$key}->{PlayerID} +; + $FL2s = $flHash->{$key}->{Salary}; + $FL2p = $flHash->{$key}->{FPPG}; + $FL2pos = $flHash->{$key}->{Positio +n}; + if (($FL2i != $RB1i) && ($FL2i != $ +RB2i) && ($FL2i != $WR1i) && ($FL2i != $WR2i) && ($FL2i != $TE1i) && +($FL1i != $FL2i)) #FL1 != If Start + { + ########################################### +#################### + $newMaxSalary = $QB1s + $QB2s + $RB1s + + $RB2s + $WR1s + $WR2s + $TE1s + FL1s; + $newMaxPoint = $QB1p + $QB2p + $RB1p + +$RB2p + $WR1p + $WR2p + $TE1p + $FL1p; + if($newMaxSalary < $maxSala +ry) + { + #print "Current Salary += " . $newMaxSalary . "\n"; + if (!$maxPoint) + { + $maxPoi +nt = $newMaxPoint; + } + else + { + if($max +Point < $newMaxPoint) + { + + $maxPoint = $newMaxPoint; + + print "New Max Points Reached! " . $maxPoint . "\n"; + + print "Here is your team! \n"; + + print "QB1 = " . $QB1i . "\n"; + + print "QB2 = " . $QB2i . "\n"; + + print "RB1 = " . $RB1i . "\n"; + + print "RB2 = " . $RB2i . "\n"; + + print "WR1 = " . $WR1i . "\n"; + + print "WR2 = " . $WR2i . "\n"; + + print "TE1 = " . $TE1i . "\n"; + + print "FL1 = " . $FL1i . "\n"; + + print "FL2 = " . $FL2i . "\n"; + + print "DST = " . $DSTi . "\n"; + + print "******************************************* \n \n"; + + sleep($delay); + }#i +f + }#else + }#if + }#if + ########################################### +######################### + }#FL2 != If End + }#FL2 End + }#FL1 != If End + }#FL1 End + }#DST End }#TE1 +End }#WR2 End }#WR1 End }#RB2 If End }#RB2 End }#RB1 End } }#QB2 End }#QB1 End print "--------------- Projected Team Points = $maxPoints ------------ +--\n"; print "$$$$$$$$$$$$$$$ Projected Team Salary = $salary $$$$$$$$$$$$$$$ +\n\n"; $programStopTime = localtime(); print "Program Start Time - $programStartTime, Program Stop Time - $pr +ogramStopTime \n";
    I love it when a program comes together - jdhannibal
      Wild guess here; but could your sleep($delay); function cause any buffering?

      Like I said, a wild guess. Glancing at it here. That was all that jumped out at me

      HTH

      --Chris

      #!/usr/bin/perl -Tw
      use Perl::Always or die;
      my $perl_version = (5.12.5);
      print $perl_version;
        Tried setting the delay to 0 and no dice. It just get's to the "Out of Memory!" error much faster (which will help in tracking down the issue). Is there a way to track down memory leaks in perl?
        I love it when a program comes together - jdhannibal
      Are you perchance coding on a widescreen monitor? It might affect your code layout.
      $newMaxSalary = $QB1s + $QB2s + $RB1s + $RB2s + $WR1s + $WR2s + $TE1s ++ FL1s;
      This shouldn't affect anything memory-related, but FL1s is missing a dollar sign there.
      My OCD kicked in and while I could not find any particular memory-related errors, I 'fixed' the program's indentation so that it should be more legible (so the other monks have an easier time looking at it).

      A couple of more obvious errors were fixed, too. Please check that the code still behaves the same.

      You really ought to use warnings at the very least; it might provide pertinent clues to the issue.

        Excellent catches. Yes, I program on a widescreen so sorry about the funky, hard to read output. Is there a way to change that in my account settings? Also, using warnings helped a bit. It showed a bunch of problems that were solved by simply putting "my" infront of a few variables. I'm running the program right now to see if it runs into the same error. I'll let you know if it continues, but when I run the program it can take a while before it runs out of memory.

        My perl version is 5, version 16, subversion 3 (v5.16.3)

        I love it when a program comes together - jdhannibal
      You have "foreach" loops 10 deep in that program. If each one runs only 3 times, that's 60,000 iterations of the inner loop. I would seriously consider rethinking what you're trying to do, or how you're doing it, because an O(n^10) algorithm is usually a recipe for disaster.
      Downvoted!

      Your code is unreadable and you've been begged to reduce indentation, but you didn't react.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1062778]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (7)
As of 2014-12-27 22:12 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (177 votes), past polls