Hoi,

Ik heb een programma gemaakt waarin arrays vergeleken worden.

De loop is 14 iteraties groot, maar vanaf 12 wordt het zo groot dat ik of een server timeout krijg of een out of memory error. Ik werk op XAMPP op de localhost.

Ik heb geprobeerd in de php.ini de limit van de tijd en size te vergroten. Maar er lijkt niet veel te gebeuren.

Iemand die nog tips heeft?
Wat dacht je van de time-out oplossen? Er moet vast wel iets te vinden zijn om het geheugenverbruik terug te dringen. Is er niet sprake van een 'oneindige lus'?

Anyway, zonder enige code kunnen we niet veel advies geven.
Matthijs heeren op 15/06/2016 17:54:37

Ik heb geprobeerd in de php.ini de limit van de tijd en size te vergroten. Maar er lijkt niet veel te gebeuren.

Als het vergelijken van de arrays parallel in plaats van serieel kan, kun je PHP wel zo gek krijgen om dat met multi-processing te doen. Een quad core heeft niet voor niets vier processorkernen, dus laat die maar eens lekker warmlopen op al die big data.

Eérst zou ik echter nalopen waar je code vastloopt op het geheugengebruik. De usual suspect bij meerdimensionale arrays is het overladen/dupliceren van data naar een nieuwe array. Tel dus je arrays en let op je adressering.

Wat verder altijd hebt: gooi wat je niet meer nodig hebt weg door het gelijk te stellen aan NULL.
Bedankt voor replies.

Hier nog wat meer informatie:
Ik heb in de file: C:\xampp\php\php.ini 2 aanpassingen gemaakt:
max_execution_time=60
memory_limit=-1

Er staan ook nog 2 files: php.ini-development php.ini-production. Maar die heb ik niet aangepast.

Ik krijg soms de time out en soms de "out of memory error". Hier zie je een voorbeeld.

Fatal error: Out of memory (allocated 1825046528) (tried to allocate 36 bytes) in C:\xampp\htdocs\testwebsites\buslijnen\buslijnen-calculator.php on line 305


Hier nog wat meer over het programma:
Er is 1 grote array. Daarna wil ik die combineren met de kleine nieuwe array (waarin nieuw gevonden opties zitten). Er wordt een array aangemaakt "alleCombinaties2Dagen" waarin alle mogelijkheden zitten van de 2 arrays gecombineerd.

(Als laatste stap moeten de arrays met dubbele waarden op bepaalde plekken worden verwijderd, maar dat gebeurd later in het programma.)


Stel iteratie nummer 8:

combinaties grote array dag 1 is: 4122
combinaties voor nieuwe dag 2 is: 11
Lengte array all combinations for 8 dagen is: 45342

De gecombineerde array zal dus 45342 waarde hebben. (Daarna gaat hij door de filter functie en blijven er 26000 over.)

Hieronder de functie waar het vastloopt.


<?php
public function bepaalAlleCombinaties2Dagen($combinatiesDag1,$combinatiesDag2){	
		
		echo "<br /> combinaties grote array dag 1 is: ".count($combinatiesDag1)."";
		echo "<br />combinaties voor nieuwe dag 2 is: ".count($combinatiesDag2)."";
		
		$combined=array();
		$alleCombinaties2Dagen=array();
		foreach($combinatiesDag1 as $k=>$v){
			$combined=$v;
			foreach($combinatiesDag2 as $b1=>$b2){
				foreach($b2 as $d1=>$d2){
					array_push($combined,$d2);				
				}	array_push($alleCombinaties2Dagen,$combined);
				$combined=$v;
			}			
		}
		return $alleCombinaties2Dagen;		

	//	echo $this->displayCombination($this->alleCombinaties2Dagen);		
}
?>



Reageren