IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Exécution code C# dans une page ASP.NET


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Exécution code C# dans une page ASP.NET
    Bonsoir à tous.
    Je m'adresse à vous car je n'ai pas trouver de solutions à mon problème et je suis à court de temps.
    En effet, j'implémente une approche que j'ai moi-même proposé dans mon projet de fin d'études. Je travaille sur la recherche d'information personnalisée sur Internet et l'approche que j'ai proposée ce base exclusivement sur les résultats de recherche retournés par Google.
    Dans mon application, j'analyse l'Html des résultats de Google à l'aide de la librairie "HtmlAgilityPack" afin de récupérer les Urls des pages web que Google a trouvé suite à la requête que je lui ai passé. Après récupération de toutes les Urls, je dois récupérer l'Html de chaque page.

    Le problème c'est que j'ai un grand nombre de pages à récupérer (entre 100 et 1000 pages) et faire ça en local c'est vraiment galère. J'ai testé ça en local en divisant la récupération des pages sur des threads, ça m'a pris 17 minutes et 11 secondes pour télécharger 400 pages et mon encadreur m'a dit que c'est inacceptable. Ce processus de recherche et de récupération peut se répéter autant de fois que le désire l'utilisateur, alors vous imaginez si l'utilisateur doit attendre 20 minutes à chaque recherche.

    Donc un ami m'a conseillé d'écrire un code C# pour récupérer l'Html des pages web qu'il me faut et de mettre ce code dans une page ASP.NET (vu que je travaille sous C#.NET) et mon application fera appel à cette page qui exécutera ce code et retournera une liste d'objets contenant les résultats à mon application. Ceci afin de profiter de la puissance des serveurs qui hébergent les pages ASP.NET et pallier au problème de temps d'exécution qui me fait défaut.

    Malheureusement, il n'y connait pas grand chose à l'ASP.NET et mes connaissances dans ce langage sont nulles.
    Je vous demande donc à vous, de m'aider sur ce problème, me donner une solution de page ASP.NET qui correspondrait à la suggestion de mon ami, car là il ne me reste vraiment plus de temps pour trouver une autre solution ou changer mon approche puisque mon application est presque terminée et le seul truc qui me fait défaut c'est la récupération des pages web dans un temps minime.

    N'importe quelle solution faisable qui me ferait gagner du temps est la bienvenue.

    Je vous remercie d'avance.

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Le mettre sur un serveur ou il y'a ASP.Net ne changera strictement rien du tout... Je vois d'ailleurs pas le rapport.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Ben la vitesse d'exécution des serveurs d'hébergement est plus puissante que la vitesse d'exécution d'un simple PC.

  4. #4
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Bof... Pas tellement... Tout dépend des machines et avec la puissance des machines actuelles la différence n'est pas si marquée...
    Si jprend mon PC de bureau, j'ai un Core2 Quad Q9400 alors que mes deux serveurs dédiés sont un Intel Atom et un Core 2 Duo. Victoire mon pc de bureau!
    Et puis, qu'est ce qui te dis que c'est ton CPU qui est limitant? Un scooter 50cm^3, t'as beau le mettre sur une autoroute, c'est pas pour ca que t'iras à 130km/h
    Bref, c'est pas si simple que ca! En plus, même chose pour la parallèlisation, as tu identifié les goulots d'étranglement?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Bon je t'explique le principe de mon approche de parallélisation :
    J'ai 20 requêtes Google à exécuter, j'ai affecté chaque requête à un Thread qui est sensé récupérer 20 pages. Je les lance tous en même temps et je les laisse chacun récupérer les 20 pages. J'ai testé ça et j'ai obtenu 400 pages en 17 minutes et 11 secondes.

    Que veux-tu dire par les goulots d'étranglement???

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Je pense que lorsqu'il parle de goulots d'étranglements il veut dire=>Si tu n'as qu'un seul thread qui exécute le 20 requêtes qu'est-ce qui consomme le plus de temps ? Parce que si google prends 90% du temps pour répondre à ta requête alors le goulot d'étranglement se situe à ce niveau sinon si 90% du temps est consommé dans une classe à toi pour décoder la requête c'est encore autre chose.

    Cependant quelque chose me semble pas clair, est-ce que les 20 requêtes sont les mêmes pour tes 20 threads ? Car j'ai du mal à comprendre pourquoi envoyer 20 fois 20 requêtes identiques ou alors ce n'est pas des requêtes identiques et dans ce cas on peut se poser la question de quelles requêtes consomment le plus de temps (dans la mesure où le goulot d'étranglement est là)?
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  7. #7
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Exactement, ce que je cherche à dire c'est à quoi ca te sert d'avoir une foudre de guerre comme pc si c'est à cause du réseau que c'est lent. A quoi ca te sert d'avoir une connexion de folie si c'est codé avec les pieds derrière.
    Dans toute démarche d'optimisation de performances, il y'a une partie mesure. C'est elle qu'est la plus importante! Si tu te tues à optimiser ce qui ne prend déjà pas de temps, ca ne sert à rien. Avant de trouver un plan d'action, cherche d'abord la cause.
    Qui te dis que la librairie accepte par exemple les appels en parallèle? Il est possible qu'elle fasse une file d'attente de toutes les requêtes.
    Je me répète mais sans observations fiables tu ne peux conjecturer sur un plan d'action efficace.

  8. #8
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    je ne vois pas l'interet de la page ASP !!!

    Pour récupérer une page HTML, en C#, cela se fait facilement (cherche code sur internet).. et ensuite, analyser les balises retourner par la page pour y trouver ton information n'a rien à voir avec l'utilisation d'ASP.

    Comme dit par Nathanael, dans ce genre de problématique de "grand volume", il est important d'identifier ou se situe les limitations de ton système. Si la récupération de 1000 pages est lente, c'est peut-etre aussi parce que si tu fais plein de requete sur les serveur de google, ceux ci vont "réduire" ta "bande passante" ou te blacklister...

    Il me semble que sur certains serveurs (google je crois le fait), une analyse de l'adresse IP du client est faite pour éviter d'avoir 1000 requetes à la seconde émanant d'un client. 1000 requetes ne peuvent provenir d'une action manuelle, donc, s'est un "système de protection" contre des attaques pirates ou bien une exploitation automatique d'information fournis par des serveurs mais également un "bon" moyen de limité la charge des serveurs et d'éviter qu'ils tombent rapidement fasse à trop de requetes...
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  9. #9
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    D'ailleurs, je ne sais même pas si c'est autorisé dans les conditions d'utilisation de Google ce genre de truc.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Bon je vais répondre à vos questions :
    Premièrement, les 20 requêtes que j'affecte aux 20 threads sont toutes distinctes.
    Chaque requête est de la forme suivante :
    http://www.google.fr/search?q=algori...pe:html&num=20
    Si vous remarquez bien le dernier paramètre "num" reçoit le nombre de page que va me retourner Google.
    Je tiens aussi à vous dire que chaque thread, en exécutant sa requête Google, le fait immédiatement et que par conséquent il n'y a pas de problème à ce niveau.
    La librairie que j'utilise "HtmlAgilityPack" n'a rien à voir avec le parallélisme, elle permet d'analyser de façon efficace le code Html et d'extraire aisément les balises recherchées de ce derniers. Chaque thread l'utilise dans son code à exécuter de façon totalement indépendante, c'est comme si vous utilisez les expressions régulières pour analyser une chaine de caractère, c'est le même principe.
    Le tout le traitement qui se fait en local et qui n'a aucun rapport avec l'envoi des requêtes Google ou bien avec le téléchargement des 20 pages à partir des Urls retournées par Google. J'ai essayé de récupérer le code Html d'un résultat de Google et j'ai récupéré l'Html des 20 pages et j'ai exécuté le traitement d'analyse de l'Html de chaque page, tout ce fait en un eclair sans aucune attente.
    Le problème réside dans le téléchargement de l'Html de chaque page, c'est ça qui prend le plus de temps.
    Une solution m'a été proposée, c'est d'utiliser WCF Services. J'implémente mon service web qui fait la récupération de l'Html de toutes les pages et je l'héberge dans un serveur. Après je n'aurai qu'à invoqué le service web de mon application et il me retournera une liste d'objets contenant les pages que je veux. On m'a aussi confirmé que l'exécution seront grandement réduite sur un serveur que sur ma propre machine. C'est un spécialiste de l'hébergement qui m'a confirmé ça. Dans ma machine, je suis limité par la connexion et par les performances. Par contre, un serveur est destiné à recevoir et à répondre rapidement à plusieurs requêtes. Vous même, en parlant des serveurs de Google, vous avez implicitement parlé de ça.
    Je vais essayer d'implémenter et de tester ça et si ça marche, je vous tiendrai au courant.
    Je vous remercie pour vos conseils.

  11. #11
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    D'ailleurs, c'est déconseillé de procéder comme tu fais étant donné qu'il y'a des API concues pour ca:
    http://code.google.com/apis/customse...sing_rest.html

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Je ne dépasserai jamais les 1000 requêtes dans mon application, ce que je fais n'est qu'expérimental, dans le cadre de mon projet. En plus j'utilise Google seulement pour répondre au mieux à la requête de l'utilisateur et donc c'est comme si l'utilisateur utilisait Google dans un navigateur sauf que le navigateur c'est mon application et qu'elle est plus intelligente car elle répond au mieux au besoin informationnel de l'utilisateur.

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/10/2007, 19h11
  2. intégration de code javascript dans une page asp.net
    Par Je-cherche-pfe dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 06/09/2007, 17h10
  3. implentation un code c# sous une page asp.net
    Par isselmoumg dans le forum ASP.NET
    Réponses: 1
    Dernier message: 14/05/2007, 08h28
  4. Réponses: 3
    Dernier message: 13/11/2006, 23h25
  5. Réponses: 1
    Dernier message: 04/04/2006, 11h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo