Muy lento para pasar una cantidad "grande" de datos desde la extensión de Chrome al host (escrito en C #)

Estoy usando ChromeAPI de mensajería nativa pasar el DOM de una página a mi host. Cuando intento pasar una pequeña cadena desde mi extensión a mi host, todo funciona, pero cuando trato de pasar todo el DOM (que no es tan grande ... solo alrededor de 260 KB), todo funciona mucho más lento y eventualmente obtengo unNative host has exited error evitando que el host responda.

Mi pregunta principal: ¿Por qué lleva tanto tiempo pasar un mensaje de 250 KB a 350 KB de la extensión al host?

De acuerdo con lasitio del desarrollador:

Chrome inicia cada host de mensajería nativo en un proceso separado y se comunica con él mediante entrada estándar (stdin) y salida estándar (stdout). Se utiliza el mismo formato para enviar mensajes en ambas direcciones: cada mensaje se serializa utilizando JSON, codificado en UTF-8 y está precedido por una longitud de mensaje de 32 bits en orden de bytes nativo. El tamaño máximo de un solo mensaje del host de mensajería nativo es de 1 MB, principalmente para proteger a Chrome de un mal comportamiento de las aplicaciones nativas.El tamaño máximo del mensaje enviado al host de mensajería nativo es de 4 GB.

Las páginas cuyos DOM que estoy interesado en enviar a mi host no superen los 260 KB (y en ocasiones 300 KB), muy por debajo del máximo impuesto de 4 GB.

popup.js

document.addEventListener('DOMContentLoaded', function() {
    var downloadButton = document.getElementById('download_button');
    downloadButton.addEventListener('click', function() {
        chrome.tabs.query({currentWindow: true, active: true}, function (tabs) {
            chrome.tabs.executeScript(tabs[0].id, {file: "getDOM.js"}, function (data) {
                chrome.runtime.sendNativeMessage('com.google.example', {"text":data[0]}, function (response) {
                    if (chrome.runtime.lastError) {
                        console.log("Error: " + chrome.runtime.lastError.message);
                    } else {
                        console.log("Response: " + response);
                    }
                });
            });
        });
    });
});

host.exe

private static string StandardOutputStreamIn() {
    Stream stdin = new Console.OpenStandardInput();
    int length = 0;
    byte[] bytes = new byte[4];
    stdin.Read(bytes, 0, 4);
    length = System.BitConverter.ToInt32(bytes, 0);

    string = "";
    for (int i=0; i < length; i++)
        string += (char)stdin.ReadByte();

    return string;
}

Tenga en cuenta que encontré el método anterior deesta pregunta.

Por el momento, solo estoy tratando de escribir la cadena en un archivo .txt:

public void Main(String[] args) {
    string msg = OpenStandardStreamIn();
    System.IO.File.WriteAllText(@"path_to_file.txt", msg);
}
Escribir la cadena en el archivo lleva mucho tiempo (~ 4 segundos y, a veces, hasta 10 segundos).La cantidad de texto que realmente se escribe varía, pero nunca es más que la declaración del documento principal y algunas etiquetas de comentarios de IE. Todo el texto ahora aparece.Este archivo con apenas texto tiene 649 KB, pero el documento real solo debería tener 205 KB (cuando lo descargue). El archivo sigue siendo un poco más grande de lo que debería ser (216 KB cuando debería ser 205 KB).

He probado migetDOM.js funciona simplemente descargando el archivo, y todo el proceso es casi instantáneo.

No estoy seguro de por qué este proceso está tomando tanto tiempo, por qué el archivo es tan grande o por qué apenas se envía parte del mensaje.

No estoy seguro de si esto tiene algo que ver con la deserialización del mensaje de una manera específica, si debo crear un puerto en lugar de usar elchrome.runtime.sendNativeMessage(...); método, o si hay algo completamente diferente que me estoy perdiendo.

¡Toda ayuda es muy apreciada! ¡Gracias!

EDITAR

Aunque mi mensaje se envía correctamente DESDE la extensión AL host, ahora recibo un mensajeNative host has exited error antes de que la extensión reciba el mensaje del host.

Respuestas a la pregunta(1)

Su respuesta a la pregunta