dot net: threads em execução muito lenta na edição expressa visual studio 2008?

votos
1

Estou executando 12 tópicos .function que esses segmentos estão chamando não está tendo qualquer bloqueio em algum object.but ainda esses tópicos estão levando muito tempo. (16 minutos) .each enfiar ei ra me analisar um documento XML que está a decorrer bem se executar indiviually .is este problema por causa de algum motivo relacionado max há tópicos fornecidos pelo express edition ou algum dn bloqueio por edição express.


código dos func whic cada thread chama é dado abaixo. cada segmento está dada RSSFeed diferente (urladdress)

public static class RssFileReader
{
    public static Rss GetRssDocumentData(string rssFeed)
    {
        Console.WriteLine(thread in RssFileReader:  + Thread.CurrentThread.Name);

        IFormatProvider culture = new CultureInfo(fr-FR, true);

        Rss rssDocumentObject=new Rss();
        XmlDocument documentObj = new XmlDocument();
        try
        {
            documentObj.Load(HttpClient.GetWebResponse(@rssFeed, null, null, 1200000, @http://www.sahil.com).GetResponseStream());
        }
        catch(Exception e)
        {
            e.Source = RssFileReader:Loading xmldocument object;
            throw;
        }
        try
        {
            XmlNodeList channelList = documentObj.GetElementsByTagName(channel);
            for (int k = 0; k < channelList.Count; k++)
            {

                rssDocumentObject.ListOfChannel.Add(new Channel());
                int noOfItemInChannel = -1;
                //XmlNodeList itemList = channelList[k].ChildNodes;
                for (int i = 0; i < channelList[k].ChildNodes.Count; i++)
                {


                    switch (channelList[k].ChildNodes[i].Name)
                    {

                        case item:
                            noOfItemInChannel++;
                            XmlNodeList xmlChildNodeOfItem = channelList[k].ChildNodes[i].ChildNodes;
                            //debugging
                            //Console.WriteLine(Thread Name in item in RssFileReader + Thread.CurrentThread.Name);

                            rssDocumentObject.ListOfChannel[k].ListOfItem.Add(new Item());

                            for (int j = 0; j < xmlChildNodeOfItem.Count; j++)
                            {
                                switch (xmlChildNodeOfItem[j].Name)
                                {
                                    case title:
                                        rssDocumentObject.ListOfChannel[k].ListOfItem[noOfItemInChannel].ItemTitle.InnerText = xmlChildNodeOfItem[j].InnerText;
                                        break;
                                    case link:
                                        rssDocumentObject.ListOfChannel[k].ListOfItem[noOfItemInChannel].ItemLink.InnerText = xmlChildNodeOfItem[j].InnerText;
                                        break;
                                    case description:
                                        rssDocumentObject.ListOfChannel[k].ListOfItem[noOfItemInChannel].ItemDescription.InnerText = xmlChildNodeOfItem[j].InnerText;
                                        break;
                                    case pubDate:
                                        try
                                        {
                                            string dateTimeTemp = xmlChildNodeOfItem[j].InnerText;
                                            char[] splitCharArray = new char[1];
                                            splitCharArray[0] = ' ';
                                            string[] splitedDateTimeTemp = dateTimeTemp.Split(splitCharArray);
                                            string RFC822 = ddd,ddMMMyyyyHH:mm:ss;
                                            rssDocumentObject.ListOfChannel[k].ListOfItem[noOfItemInChannel].ItemPubDate.PublicationDate = DateTime.ParseExact(splitedDateTimeTemp[0] + splitedDateTimeTemp[1] + splitedDateTimeTemp[2] + splitedDateTimeTemp[3] + splitedDateTimeTemp[4], RFC822, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None);
                                        }
                                        //exception not rethrown default date is assigned 
                                        catch (Exception e)
                                        {
                                            //Console.WriteLine(Exception while formatting string to datetime in rssFileReader(): + e);
                                        }
                                        break;
                                    case guid:
                                        rssDocumentObject.ListOfChannel[k].ListOfItem[noOfItemInChannel].ItemGuid.InnerText = xmlChildNodeOfItem[j].InnerText;
                                        break;


                                }
                            }
                            break;
                        case title:
                            rssDocumentObject.ListOfChannel[k].ChannelTitle.InnerText = channelList[k].ChildNodes[i].InnerText;
                            break;
                        case description:
                            rssDocumentObject.ListOfChannel[k].ChannelDescription.InnerText = channelList[k].ChildNodes[i].InnerText;
                            break;
                        case link:
                            rssDocumentObject.ListOfChannel[k].ChannelLink.InnerText = channelList[k].ChildNodes[i].InnerText;
                            break;

                        case language:
                            rssDocumentObject.ListOfChannel[k].ChannelLanguage.InnerText = channelList[k].ChildNodes[i].InnerText;
                            break;
                        case pubDate:
                            try
                            {
                                string dateTimeTempForChannel = channelList[k].ChildNodes[i].InnerText;
                                char[] splitCharArrayForChannel = new char[1];
                                splitCharArrayForChannel[0] = ' ';
                                string[] splitedDateTimeTempForChannel = dateTimeTempForChannel.Split(splitCharArrayForChannel);
                                string formatStringForChannel = ddd,ddMMMyyyyHH:mm:ss;
                                rssDocumentObject.ListOfChannel[k].ChannelPubDate.PublicationDate = DateTime.ParseExact(splitedDateTimeTempForChannel[0] + splitedDateTimeTempForChannel[1] + splitedDateTimeTempForChannel[2] + splitedDateTimeTempForChannel[3] + splitedDateTimeTempForChannel[4], formatStringForChannel, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None);
                            }
                            //exception not rethrown default date is assigned 
                            catch (Exception e)
                            {
                                //Console.WriteLine(Exception while formatting string to datetime in rssFileReader(): + e);

                            }
                            break;
                        case lastBuildDate:
                            try
                            {
                                string dateTimeTempForChannel = channelList[k].ChildNodes[i].InnerText;
                                char[] splitCharArrayForChannel = new char[1];
                                splitCharArrayForChannel[0] = ' ';
                                string formatStringForChannel = ddd,ddMMMyyyyHH:mm:ss;

                                string[] splitedDateTimeTempForChannel = dateTimeTempForChannel.Split(splitCharArrayForChannel);
                                rssDocumentObject.ListOfChannel[k].ChannelLastBuildDate.LastBldDate = DateTime.ParseExact(splitedDateTimeTempForChannel[0] + splitedDateTimeTempForChannel[1] + splitedDateTimeTempForChannel[2] + splitedDateTimeTempForChannel[3] + splitedDateTimeTempForChannel[4], formatStringForChannel, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None);
                            }
                            //exception not rethrown default date is assigned 
                            catch (Exception e)
                            {
                                //Console.WriteLine(Exception while formatting string to datetime in rssFileReader(): + e);

                            }

                            break;

                        case docs:
                            rssDocumentObject.ListOfChannel[k].ChannelDocs.InnerText = channelList[k].ChildNodes[i].InnerText;
                            break;
                        case generator:
                            rssDocumentObject.ListOfChannel[k].ChannelGenerator.InnerText = channelList[k].ChildNodes[i].InnerText;
                            break;
                        case managingEditor:
                            rssDocumentObject.ListOfChannel[k].ChannelManagingEditor.InnerText = channelList[k].ChildNodes[i].InnerText;
                            break;
                        case webMaster:
                            rssDocumentObject.ListOfChannel[k].ChannelWebMaster.InnerText = channelList[k].ChildNodes[i].InnerText;
                            break;
                        case ttl:
                            rssDocumentObject.ListOfChannel[k].ChannelTtl.InnerText = channelList[k].ChildNodes[i].InnerText;
                            break;

                    }
                }


            }
        }
        catch(Exception e)
        {
            e.Source = RssFileReader:Reading xml document object data to rss object;
            throw;
        }
        Console.WriteLine(    Thread out RssFilereader : + Thread.CurrentThread.Name);
        return rssDocumentObject;
    }
}

Atenção: depuração -enquanto i tem que saber que o seu tempo de tomada ao carregar documento XML. há qualquer limite imposto no sistema para o número de objetos WebRequest?

Publicado 19/05/2009 em 15:37
fonte usuário
Em outras línguas...                            


2 respostas

votos
3

Se você estiver usando solicitações web para o mesmo servidor, aqueles são estrangulados por padrão para duas conexões ao mesmo tempo.

Você está em seguida, deixando de descartar o fluxo de resposta e resposta, o que significa que vou esperar até que ele é lixo coletado para liberar a conexão para uso em outro lugar. Alterar o código de carregamento para:

    try
    {
        // Removed unnecessary @ signs
        using (WebResponse response = HttpClient.GetWebResponse(
                  rssFeed, null, null, 1200000, "http://www.sahil.com"))
        using (Stream responseStream = response.GetResponseStream())
        {
            documentObj.Load(responseStream);
        }
    }
    catch(Exception e)
    {
        e.Source = "RssFileReader:Loading xmldocument object";
        throw;
    }

É possível que você só precisa fechar a resposta web - que o fluxo vai ser tomado cuidado ao fechar a resposta - mas é melhor ter a certeza.

Você ainda só tem dois tópicos usando conexões com o mesmo servidor ao mesmo tempo (por padrão, para non-ASP.NET, você pode alterar esse mesmo usando ServicePointManager.DefaultConnectionLimitou o connectionManagementelemento arquivo de configuração ), mas, pelo menos, em seguida, você não vai precisar para esperar enquanto a conexão está ocioso fora ou espera para coleta de lixo.

Respondeu 19/05/2009 em 15:42
fonte usuário

votos
0

foi tomada de tempo quando eu estava correndo-lo a partir de testes de console applcation fr. razão fo muito tempo que era io bloqueando por causa de declarações pinta fr depuração.

Respondeu 18/06/2009 em 09:44
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more