PROBLEMA COM COLLECTION
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:
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!
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!
Já pensou em usar expressões lambda?
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 :\
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 :\
Detalhe,essa rotina esta em um timer que roda em tempo real e vai procurando na memoria partes de uma palavra no listof
Alguem?! :\
Exemplo retornará um boolean:
O x representa cada objeto na sua lista.
Espero que ajude.
lista.ToList().Exists(Function(x) Not x.SuaPropriedadeTexto.Contains([Ô]seuTextoParcial[Ô]))
O x representa cada objeto na sua lista.
Espero que ajude.
Valeu brother pelo retorno eu vou testar aqui,
estou etudando expressoes lambda
estou etudando expressoes lambda
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
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
[Ô]Contains[Ô] você pode especificar perfeitamente só parte do nome que a procura é feita com o mesmo critério do like
fiz um teste:
Funciona perfeitamente,se eu colocar no constructor [Ô]exp[Ô] e [Ô]task[Ô] ele nao cai no msgbox!
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!
Use o FindAll
listToKill as Object = _lista.ToList().FindAll(Function(x) x.Contains([Ô]seuTexto[Ô]))
listToKill.ForEach(Function (x) x.Kill())
Tópico encerrado , respostas não são mais permitidas