Pergunta

public static string[] GetStringInBetween(string strBegin, string strEnd, string strSource, bool includeBegin, bool includeEnd)
        {
            string[] result = { "", "" };
            int iIndexOfBegin = strSource.IndexOf(strBegin);

            if (iIndexOfBegin != -1)
            {
                // include the Begin string if desired
                if (includeBegin)
                    iIndexOfBegin -= strBegin.Length;

                strSource = strSource.Substring(iIndexOfBegin + strBegin.Length);
                int iEnd = strSource.IndexOf(strEnd);

                if (iEnd != -1)
                {
                    // include the End string if desired
                    if (includeEnd)
                        iEnd += strEnd.Length;

                    result[0] = strSource.Substring(0, iEnd);

                    // advance beyond this segment
                    if (iEnd + strEnd.Length < strSource.Length)
                        result[1] = strSource.Substring(iEnd + strEnd.Length);
                }
            }

            return result;
        }

uso:

string[] result = null;
result = HtmlHelper.GetStringInBetween(bits[0], bits[1], tagValuePair.Value, true, true);

eu estou usando dottrace e este uso do método de 33% da minha CPU.Como posso aperfeiçoá-lo.Configuração de largura de banda do meu acidente de aplicação ou sair de memória.É inteligente", que este método é estático?

dottrace show de 30% de uso da cpu em este:

System.String.IndexOf(String, Int32, Int32, StringComparison)

enter image description here

EDITAR:

    GetStringInBetween(string strBegin, string strEnd, string strSource, bool includeBegin, bool includeEnd)

strBegin = "<td class=\"m92_t_col2\">"
strEnd = "</td>"
strSource = "xxxxxxxx<td class=\"m92_t_col2\">Di. 31.01.12</td>xxxxxxxxxxxxxx
includeBegin = true
includeEnd = true

then i will get result
result[0] = "<td class=\"m92_t_col2\">Di. 31.01.12</td>"

espero que isso ajude que este método de fazer.Tente encontrar seqüência de caracteres entre strBegin e strEnd...

Foi útil?

Solução

Cópia de parte da seqüência de caracteres (sua primeira SubString chamada) apenas para manter a procura é ruim para o desempenho.Em vez disso, manter o seu original seqüência de caracteres de entrada, mas usar a sobrecarga em IndexOf que leva um índice de início e, em seguida, ajustar o índice de cálculo para a extração do resultado de acordo.

Também, sabendo que essas cadeias de caracteres não são localizados, você pode ganhar algum usando um ordinal comparador de IndexOf.

Algo ao longo das linhas de

public static string[] GetStringInBetween(string strBegin, string strEnd, string strSource, bool includeBegin, bool includeEnd)
{
    string[] result = { "", "" };
    int iIndexOfBegin = strSource.IndexOf(strBegin, StringComparison.Ordinal);

    if (iIndexOfBegin != -1)
    {
        int iEnd = strSource.IndexOf(strEnd, iIndexOfBegin, StringComparison.Ordinal);

        if (iEnd != -1)
        {
            result[0] = strSource.Substring(
                iIndexOfBegin + (includeBegin ? 0 : strBegin.Length), 
                iEnd + (includeEnd ? strEnd.Length : 0) - iIndexOfBegin);

            // advance beyond this segment
            if (iEnd + strEnd.Length < strSource.Length)
                result[1] = strSource.Substring(iEnd + strEnd.Length);
        }
    }

    return result;
}

Outras dicas

Para o exemplo de entrada, parece que você está trabalhando com fragmentos HTML.

Eu sugiro usar o HTML Agilidade Pack para analisar o HTML ele expõe o resultado de uma fácil consulta moda, usando LINQ to XML, XPath ou tipo de sintaxe.É um rápido e eficiente biblioteca.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top