ID: 20100
Updated by: [EMAIL PROTECTED]
Reported By: [EMAIL PROTECTED]
-Status: Open
+Status: Suspended
Bug Type: COM related
Operating System: win2k
PHP Version: 4CVS-2002-10-25
New Comment:
beside that i don't have enough time to hunt memleaks in php4 code i
want to note that this was qa code and not production code. php5 has a
much better architecture to prevent such flaws.
harald
Previous Comments:
------------------------------------------------------------------------
[2002-11-30 11:33:21] [EMAIL PROTECTED]
Just a comment. As I understand PHP is meant to be optimal at handling
HTTP requests. This implies a relatively short period of processing
after which the script exits.
This processing model implies that a lazy approach to garbage
collection is going to be most often optimal. Or to put it
differently, all the garbage is collected when the script exits.
If handling better the case described here means the usual case is less
optimal then perhaps this behaviour should stay as-is? Allocating and
freeing huge numbers of largish (~10KB) COM objects is unusual usage.
BTW - it might be a more exact example if the vbscript code used
CreateObject() rather than GetObject().
------------------------------------------------------------------------
[2002-10-25 18:27:24] [EMAIL PROTECTED]
vbscript code:
wscript.echo now
For I = 1 To 3000
set
ru=GetObject("WinMgmts:{impersonationLevel=impersonate}").InstancesOf("Win32_NetworkAdapterConfiguration")
set ru = nothing
Next
wscript.echo now
vbscript output:
C:\php\wmi>cscript wmi.vbs
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
26/10/2002 00:07:26
26/10/2002 00:08:16
php code:
$prof = new Profiler;
for ($i=0;$i<3000;$i++){
$prof->startTimer($i);
$Services = new COM("winmgmts:{impersonationLevel=impersonate}") or
die("glump");
$NetworkAdapterSet =
$Services->InstancesOf('Win32_NetworkAdapterConfiguration');
$NetworkAdapterSet->release();
$Services->release();
unset($Services);
unset($NetworkAdapterSet);
$prof->stopTimer($i);
}
php results:
C:\php\snaps\php4-win32-latest>php c:\php\wmi\wmiperf.php
Warning: (null)(): Invoke() failed: Exception occurred.
<b>Source</b>: SWbemServices <b>Description</b>: Generic failure
in c:\php\wmi\wmiperf.php on line 7
Fatal error: Call to a member function on a non-object in
c:\php\wmi\wmiperf.php
on line 8
doing it as 3 seperate runs yielded:
0-1000 runs: 11313.1239 ms (100.00 %) OVERALL TIME
1000-2000 runs: 23879.2120 ms (100.00 %) OVERALL TIME
2000-3000: 544210.0750 ms (100.00 %) OVERALL TIME
At the same time, memory utilization of winmgmt.exe rises to ~30mb from
the normal 4mb...
Looks like something isn't getting freed right...
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=20100&edit=1