Что нового

[Сеть, интернет] Разрастающийся в памяти IE

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
OffTopic:
Vlasssov [?]
английские названия такие забавные
не знаю, что ты подразумеваешь, но касаемо функции что выше, ее название описывает ее функционал очень доходчиво однозначно и лаконично.
 
Автор
vcomp71

vcomp71

Осваивающий
Сообщения
431
Репутация
25
А как получить pid процесса, который создан функцией
Код:
_IECreate("")

Пробовал вот так
Код:
MsgBox(0,'Переменная',$oIE.hwnd)

Значение выдает, однако вот это:
Код:
$ss = _WinAPI_GetProcessMemoryInfo($oIE.hwnd)
MsgBox(0,'Переменная',$ss[2])

Пишет, что массив не создан.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Vlasssov,
Я думаю, что при _IECreate("") запускается процесс IEXPLORE.EXE. :smile:
У меня, независимо от кол-ва окон IE8 (хоть 1, хоть 5), в диспетчере видны 2 процесса IEXPLORE.EXE. Так у меня считает всю память, которую они кушают:
Код:
#include <WinAPIEx.au3>

Opt('MustDeclareVars', 1)

Global $iMemory = 0, $aList, $aData, $sProcess = 'IEXPLORE.EXE'

$aList = ProcessList($sProcess)
If Not $aList[0][0] Then
	MsgBox(0, 'Память', 'Нет процессов ' & $sProcess)
	Exit
EndIf
For $i = 1 To $aList[0][0]
	$aData = _WinAPI_GetProcessMemoryInfo($aList[$i][1])
	If IsArray($aData) Then
		$iMemory += $aData[2]
	EndIf
Next
Switch $iMemory
	Case 0 To 1024
		$iMemory = $iMemory & ' b'
	Case 1024 To 1048576
		$iMemory = Round($iMemory / 1024, 2) & ' kb.'
	Case Else
		$iMemory = Round($iMemory / 1048576, 2) & ' Mb.'
EndSwitch
MsgBox(0, 'Память', $sProcess & ' жрет всего: ' & $iMemory)
 
Автор
vcomp71

vcomp71

Осваивающий
Сообщения
431
Репутация
25
Идея, конечно, хорошая, однако вопрос в том, что мне вот нужно сколько КОН+КРЕТНО созданный функцией
_IECreate("")
Процесс занимает памяти. Тут вопрос в том, что память утекает, и при достижении определенного уровня (порядка 200mb) - начинает тормозить обработка. С чем связано - не знаю, однако при таком размере тормозит.

Вот как получить пид объекта $oIE?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Vlasssov
Попробуйте так:
Код:
#include <IE.au3>
#include <Array.au3>
#include <WinAPIEx.au3>

Opt('MustDeclareVars', 1)

Global $aList, $aData, $sProcess = 'IEXPLORE.EXE', $iMemory
Dim $aInfo[3][4] = [['http://www.google.ru/'],['http://www.mail.ru/'],['http://www.yandex.ru/']]
;$aInfo[$i][0] - ссылка, $aInfo[$i][1] - Handle окна, $aInfo[$i][2] - Pid, $aInfo[$i][3] - память
Dim $aoIE[3]

For $i = 0 To 2
	$aoIE[$i] = _IECreate($aInfo[$i][0])
Next

For $i = 0 To 2
	$aInfo[$i][1] = _IEPropertyGet($aoIE[$i], 'hwnd')
	$aInfo[$i][2] = WinGetProcess($aInfo[$i][1])
Next
$aList = ProcessList($sProcess)
If $aList[0][0] Then
	For $i = 1 To $aList[0][0]
		If _ArraySearch($aInfo, $aList[$i][1], 0, 0, 0, 0, 0, 2) = -1 Then
			ReDim $aInfo[UBound($aInfo) + 1][4]
			$aInfo[UBound($aInfo) - 1][0] = 'Еще один процесс IE'
			$aInfo[UBound($aInfo) - 1][2] = $aList[$i][1]
		EndIf
	Next
EndIf
For $i = 0 To UBound($aInfo) - 1
	$aData = _WinAPI_GetProcessMemoryInfo($aInfo[$i][2])
	If IsArray($aData) Then
		$iMemory = $aData[2]
		Switch $iMemory
			Case 0 To 1024
				$iMemory = $iMemory & ' b'
			Case 1024 To 1048576
				$iMemory = Round($iMemory / 1024, 2) & ' kb.'
			Case Else
				$iMemory = Round($iMemory / 1048576, 2) & ' Mb.'
		EndSwitch
		$aInfo[$i][3] = $iMemory
	EndIf
Next
_ArrayDisplay($aInfo)
У меня все окна IE висят на одном процессе и есть еще один доп. процесс IE, который больше всего памяти забирает.
 
Автор
vcomp71

vcomp71

Осваивающий
Сообщения
431
Репутация
25
Код:
#include <IE.au3>
#include <Array.au3>
#Include <File.au3>
#Include <Date.au3>
#Include <WinAPIEx.au3>

$oIE = _IECreate()
$spid = _IEPropertyGet($oIE, 'hwnd')
$pidd = WinGetProcess($spid)
$aData = _WinAPI_GetProcessMemoryInfo($pidd)
 
Верх