Question

Je suis en train d'exécuter une certaine logique sur plusieurs domaines d'application en parallèle. Je fais cela parce que je travaille avec le code existant qui est « non modifiable » et je veux améliorer les performances en paralléliser certaines choses. Le problème est que si j'exécuter plusieurs instances au sein de 1 AppDomain tous reposent sur des structures de données statiques et interfèrent avec eachother.

Ma mise en œuvre est simple. Je veux exécuter plusieurs instances de mon « ExecutionHarness » classe - chacun dans leur propre AppDomain - donc je créé une classe « ExecutionHarnessProxy: MarshalByRefObject » que j'instancier dans chacun de mes domaines d'application (depuis ExecutionHarness ne hérite pas de MarshalByRefObject). Ensuite, je passe juste le paramètre « ExecutionData [] de données » à la méthode « ExecutionHarnessProxy.Execute () ». Ce gars appelle alors « ExecutionHarness.Execute () » et tout est bon.

Mon problème est maintenant que chaque fois que je passe mon tableau de données à la classe proxy, il faut FOREVER. La classe ExecutionData a l'attribut [Serializable], et fonctionnellement tout cela fonctionne, mais je me demandais s'il est possible d'accélérer cela.

  1. Se pourrait-il être plus rapide si je faisais le linéariser / désérialiser moi-même, des deux côtés de la frontière AppDomain?
  2. Est-ce tout ce temps passé à faire sérialisation? ou est-ce que le transfert des données entre un numéro de série AppDomains?
Était-ce utile?

La solution

Il est difficile de savoir sans plus d'informations, mais de ce que vous décrivez, je voudrais soupçonner le tableau de ExecutionData est le coupable.

Chaque fois que vous appelez une méthode qui nécessite ces données, vous sérialiser les données dans le AppDomain, et peut-être de retour aussi bien. Si ce tableau est grand, qui peut manger un peu de temps de traitement.

Il serait préférable que les données peuvent être chargées directement dans chaque AppDomain, et seulement passer en arrière les résultats d'exécution dans votre AppDomain principal. Si vous pouvez éviter le passage des réseaux de données entre les domaines d'application, vous aurez probablement accélérer considérablement le processus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top