es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué el uso de PLINQ es más rápido en Office Interop cuando en teoría todas las llamadas se marshallizan?

Soy nuevo en LINQ y especialmente en PLINQ. Estaba probando con ms office interop y me sorprendió descubrir que al usar PLINQ mi código se volvió significativamente más rápido (dependiendo de la consulta hasta el doble de velocidad), incluso aunque COM debería redireccionar todas mis llamadas paralelas a un solo hilo (https://learn.microsoft.com/en-us/visualstudio/vsto/threading-support-in-office?view=vs-2019).

Ahora estoy confundido sobre lo que puede estar sucediendo aquí. Incluso en libros de trabajo muy grandes, no he encontrado excepciones de “com server is busy” u otras similares.

Dim oWb as Excel.Workbook
oWb.Worksheets.Cast(Of Excel.Worksheet).AsParallel().Where(Function(x) x.Names.Count > 0).SelectMany(Function(x) x.Names.Cast(Of Excel.Name)).Where(Function(y) y.Name.StartsWith(“abc”))

El enfoque regular aquí es recorrer todas las hojas de cálculo y en cada hoja recorrer la colección .Names.

Sé que también existe una propiedad Workbook.Names, este código es solo un ejemplo para mostrar una consulta.

Leí que se pueden usar consultas PLINQ en Excel (https://devblogs.microsoft.com/pfxteam/plinq-and-office-add-ins/), pero no sé si lo mismo se aplica a interop.

Mi pregunta: ¿se puede utilizar este tipo de consulta paralela con office interop en la actualidad y es seguro hacerlo?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en multithreading, LINQ, office-interop y COM-automation, puedo confirmar que las consultas PLINQ se pueden usar con office interop, incluyendo con Excel. La razón detrás del aumento de velocidad en tu código podría deberse a la partición automática de datos y al paralelismo de PLINQ, que puede aprovechar múltiples núcleos en procesadores modernos. Sin embargo, es importante tener en cuenta que el uso de paralelismo con office interop puede ser riesgoso y puede llevar a errores como “COM server is busy”. Por lo tanto, se recomienda probar minuciosamente tu código y tener precaución al implementar paralelismo con office interop. Además, se recomienda consultar la documentación y las mejores prácticas de Microsoft para el enhebrado en complementos de Office.

Comments are closed.