PROBLEMA COM COLLECTION

PHOENIX209E 11/04/2012 17:33:53
#399625
Pessoal boas,
Seguinte,estou usando collections em minha aplicação!
Sem problemas,meu software varre os processos buscando o titulo de cada uma,baseando-se numa lista,o List(Of T).

Eu preciso que tenha mais ou menos num item na lista de processos e na ListOf.
Entao,estou usando o operador Like e dois [ô]fors[ô].

isso esta causando aumento no processamento e esta tornando o programa lento.
O codigo esta mais ou menos assim:

For i = 0 To pobj.pr_lista.Count - 1
For Each _p In Process.GetProcesses
If (UCase(_p.MainWindowTitle) Like UCase([Ô]*[Ô] & pobj.pr_lista(i) & [Ô]*[Ô])) Then
_p.Kill()
s_exibeMensagem(_p.ProcessName, pobj.pr_lista(i))
s_gravaNotifica(pobj.pr_lista(i), pobj)
End If
Next
Next


Ai eu pergunto:
Por acaso existe alguma função na classe List(Of) onde substitua o [Ô]LIKE[Ô] pra eu evitar ficar fazendo laços de repetição?!
Alguma sugestao?

Quero eliminar um dos laços,pra obter mais performance.
vasleu!
KERPLUNK 11/04/2012 20:25:40
#399649
Já pensou em usar expressões lambda?
PHOENIX209E 11/04/2012 21:48:35
#399653
Nao,na verdade só ouvi falar,nunca usei.
por favor,teria como voce usar essa expressao nesse caso?

Lembrando que eu estou usando colection,e eu quero resgatar partes,ou inteiros de uma palavra.

Estou pedindo porque realmente nunca mexi com isso :\
PHOENIX209E 11/04/2012 21:51:07
#399654
Detalhe,essa rotina esta em um timer que roda em tempo real e vai procurando na memoria partes de uma palavra no listof
PHOENIX209E 12/04/2012 13:34:06
#399695
Alguem?! :\
LLAIA 12/04/2012 14:16:16
#399700
Exemplo retornará um boolean:

lista.ToList().Exists(Function(x) Not x.SuaPropriedadeTexto.Contains([Ô]seuTextoParcial[Ô]))


O x representa cada objeto na sua lista.

Espero que ajude.
PHOENIX209E 12/04/2012 14:29:04
#399701
Valeu brother pelo retorno eu vou testar aqui,
estou etudando expressoes lambda
PHOENIX209E 12/04/2012 14:43:17
#399704
Funciona perfeitamente,mas acontece que eu preciso de pelo menos uma parte do texto/palavra.
Por exemplo:

O meu sistema bloqueia certos aplicativos,com criterios do administrador da rede.
Entao o administrador adiciona a palavra [Ô]Win[Ô]
O certo seria percorrer a memoria e buscar programas que tenham em seu titulo [Ô]Windows[Ô],[Ô]Winp[Ô],[Ô]Winamp[Ô] etc...
Entende?
Pegar pro prefixo ou sufixo like *win*.

No contains ele precisa ser exatamente como o nome original
KERPLUNK 12/04/2012 14:49:03
#399705
[Ô]Contains[Ô] você pode especificar perfeitamente só parte do nome que a procura é feita com o mesmo critério do like
PHOENIX209E 12/04/2012 14:57:49
#399706
fiz um teste:

 Dim _lista As New List(Of String)
Sub New()
InitializeComponent()
_lista.Add([Ô]taskmgr[Ô])
_lista.Add([Ô]explorer[Ô])
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim p As Process
For Each p In Process.GetProcesses
If (_lista.ToList().Exists(Function(x) x.Contains(p.ProcessName))) Then
MsgBox(p.ProcessName)
End If
Next
End Sub


Funciona perfeitamente,se eu colocar no constructor [Ô]exp[Ô] e [Ô]task[Ô] ele nao cai no msgbox!
LLAIA 12/04/2012 16:20:27
#399721
Use o FindAll

listToKill as Object = _lista.ToList().FindAll(Function(x) x.Contains([Ô]seuTexto[Ô]))
listToKill.ForEach(Function (x) x.Kill())
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas