ID: 28642 Updated by: [EMAIL PROTECTED] Reported By: am at andremeyer dot name -Status: Open +Status: Bogus Bug Type: Performance problem Operating System: Windows XP PHP Version: 5.0.3 New Comment:
>Well, assertions are not really fast - actually, they are a >bottle neck. you're probably kidding me. >As you can see from this, about 50% of the execution time >is spent in the assertion! yes. 500 thousands of function calls took about a second. is it a bottle neck? you're real-life application calls assert() billions of times? again, I don't see any performance problem here. change "assert" in your code to something else and try again - you'll see the very same results, even worse. function call is rather expensive operation (even if the function just returns true). Previous Comments: ------------------------------------------------------------------------ [2005-02-11 15:50:25] meyer at labeltools dot com In the last paragraph, I meant ini_set('assert.active', false); of course. Sorry for the inconvenience. Best regards André Meyer labeltools GmbH ------------------------------------------------------------------------ [2005-02-11 15:46:34] am at andremeyer dot name Well, assertions are not really fast - actually, they are a bottle neck. I modified my previous script. Look at this: ----------------------------------------------------------------------------- <?php $doAsserts = array(true, false); foreach ($doAsserts as $doAssert) { ini_set('assert.active', $doAssert); // Turn assertions on/off $startTime = microtime(true); for ($i = -500000; $i < 500000; $i++) { $result = $i * $i; // just to have assert($result >= 0); } $endTime = microtime(1); $time = $endTime - $startTime; print "Elapsed time: $time\r\n"; } ?> ----------------------------------------------------------------------------- Running this script, I get: Elapsed time: 1.6357040405273 Elapsed time: 1.6131460666656 Now I comment the line "assert($result >= 0);" so that the script looks like this: ----------------------------------------------------------------------------- <?php $doAsserts = array(true, false); foreach ($doAsserts as $doAssert) { ini_set('assert.active', $doAssert); // Turn assertions on/off $startTime = microtime(true); for ($i = -500000; $i < 500000; $i++) { $result = $i * $i; // just to have //assert($result >= 0); } $endTime = microtime(1); $time = $endTime - $startTime; print "Elapsed time: $time\r\n"; } ?> ----------------------------------------------------------------------------- When I run the script again, I get: Elapsed time: 0.87688493728638 Elapsed time: 0.87343096733093 As you can see from this, about 50% of the execution time is spent in the assertion! This would be still acceptable, if I could simply disable assertions. Well, I can - by ini_set('assert.active', true); - however, this only disables assertions without affecting the performance at all. When disabling assertions, any assertion should rather be considered as not existant (like a comment). I hope this can be fixed in a future PHP version! Thanks. ------------------------------------------------------------------------ [2005-02-11 15:33:50] [EMAIL PROTECTED] So, that means that assertions are so fast, that disabling them doesn't affect script performance. Agree? But if you change your code in this way: assert(is_numeric($i)); => assert("is_numeric($i)"); you'll get expected results. ------------------------------------------------------------------------ [2004-06-05 16:05:23] am at andremeyer dot name Description: ------------ Disabling assertions in PHP does not affect performance. After testing my software with assertions, I want to disable assertions. I do this with ini_set('assert.active', false); Surprisingly, the assert() statements in my software _still_ consume a considerable amount of time. Reproduce code: --------------- <?php $doAsserts = array(true, false); foreach ($doAsserts as $doAssert) { ini_set('assert.active', $doAssert); // Turn assertions on/off $startTime = microtime(true); for ($i = 0; $i < 1000000; $i++) assert(is_numeric($i)); $endTime = microtime(1); $time = $endTime - $startTime; print "Elapsed time: $time\r\n"; } ?> Expected result: ---------------- I expect something like: Elapsed time: 1.3514750003815 // assertions turned on Elapsed time: 0.4243453254354 // assertions turned off I expect the elapsed time to decrease when turning assertions off. Actual result: -------------- Elapsed time: 1.3480539321899 // assertions turned on Elapsed time: 1.3210921287537 // assertions turned off As you can see, when turning assertions off, the elapsed time is nearly the same. So I have to comment all my assertions in order to achieve a better peformance. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=28642&edit=1