2010-10-31 27 views
3

J'écris un BHO (Browser Helper Object) pour Internet Explorer en C#! Je veux rechercher des nœuds de texte dans le DOM, ce qui m'oblige à parcourir l'arborescence entière du DOM si je veux faire la différence entre les nœuds de texte et les autres types de nœuds. Ceci est censé prendre beaucoup de temps en C#, mais devrait être presque instantané en C++ (?).Puis-je utiliser C++ pour traverser DOM à partir de C# BHO?

Existe-t-il un moyen de faire le déplacement dans C++ à la place? Une DLL que je peux appeler à partir de C# peut-être, en utilisant DllImport? Est-il facile de passer le HTMLDocument à ma méthode C++ -exposée en externe?

D'autres idées?

À la votre!

+0

Il suffit d'écrire tout le BHO en C++? –

+0

J'ai tellement d'autres logique déjà écrit en C# .. – nelshh

Répondre

2

D'où tenez-vous le "supposé"? La plupart du temps sera passé dans le code qui implémente le DOM. Qui a été écrit en C++ par Microsoft. Marshal.GetIUnknownForObject() obtient un pointeur d'interface brute que vous pouvez passer au code natif. Il doit QI ce pointeur pour IHtmlDocument2 et le prendre à partir de là.

+0

http://blogs.msdn.com/b/oldnewthing/archive/2006/12/18/1317290.aspx et http://blogs.msdn.com/ b/ieinternals/archive/2009/08/21/agcore-addon-hangs-internet-explorer.aspx sont mes sources sur pourquoi ne pas écrire un BHO dans le code managé. Je pense que c'est également vrai pour l'egrunin. –

+0

Le problème d'injection de la version CLR n'a rien à voir avec perf. Résolu dans .NET 4.0 btw. –

0
C'est censé être beaucoup de temps en C#,

Ceci est tout simplement faux.

La majeure partie du temps de l'utilisateur sera consacrée à attendre que le code HTML arrive au navigateur et que le navigateur le dessine à l'écran. Par rapport à cela, marcher le DOM (dans n'importe quelle langue) est un jeu d'enfant.

+0

Marcher dans les DOM peut être assez lent, en raison de la formation de troupes. C'est l'une des raisons pour lesquelles la barre d'outils Skype nuit tellement aux performances, par exemple. Mais le point que C# est beaucoup plus lent que C++ n'est pas vraiment correct. – EricLaw

+0

Nous avons tous les deux raison. J'ai écrit beaucoup de code qui marche le DOM, la plupart du temps mais pas tous dans les BHO, en utilisant C++, VB et C#. Oui, cela prend du temps, et oui, C++ n'est pas sensiblement plus rapide que les autres, sans doute pour la raison que vous citez. – egrunin