Sehr langsam, um "große" Datenmenge von Chrome Extension an Host zu übertragen (in C # geschrieben)

Ich verwende Chrome'sNative Messaging API, um das DOM einer Seite an meinen Host zu übergeben. Wenn ich versuche, eine kleine Zeichenfolge von meiner Erweiterung an meinen Host zu übergeben, funktioniert alles, aber wenn ich versuche, das gesamte DOM (das nicht so groß ist ... nur ca. 260 KB) zu übergeben, läuft alles viel langsamer und ich erhalte schließlich eineNative host has exited error Verhindert, dass der Host antwortet.

Meine Hauptfrage: Warum dauert es so lange, eine 250 KB - 350 KB-Nachricht von der Nebenstelle an den Host zu übermitteln?

Laut dem Entwicklerseite:

Chrome startet jeden nativen Messaging-Host in einem separaten Prozess und kommuniziert mit ihm über die Standardeingabe (stdin) und die Standardausgabe (stdout). Das gleiche Format wird zum Senden von Nachrichten in beide Richtungen verwendet: Jede Nachricht wird mit JSON, UTF-8-codiert und mit einer Nachrichtenlänge von 32 Bit in nativer Bytereihenfolge versehen. Die maximale Größe einer einzelnen Nachricht vom nativen Messaging-Host beträgt 1 MB, hauptsächlich, um Chrome vor fehlerhaften nativen Anwendungen zu schützen.Die maximale Größe der an den nativen Messaging-Host gesendeten Nachricht beträgt 4 GB.

Die Seiten, deren DOMs ich an meinen Host senden möchte, sind nicht größer als 260 KB (und gelegentlich 300 KB) und liegen deutlich unter dem festgelegten Maximum von 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;
}

Bitte beachten Sie, ich fand die oben genannte Methode vonDie frage.

Im Moment versuche ich nur, die Zeichenfolge in eine TXT-Datei zu schreiben:

public void Main(String[] args) {
    string msg = OpenStandardStreamIn();
    System.IO.File.WriteAllText(@"path_to_file.txt", msg);
}
Das Schreiben der Zeichenfolge in die Datei dauert lange (~ 4 Sekunden, manchmal bis zu 10 Sekunden). Die tatsächlich geschriebene Textmenge ist unterschiedlich, es handelt sich jedoch nie um mehr als die oberste Dokumentdeklaration und einige IE-Kommentar-Tags. Der gesamte Text wird jetzt angezeigt.Diese Datei mit kaum Text ist 649 KB groß, das eigentliche Dokument sollte jedoch nur 205 KB groß sein (wenn ich sie herunterlade). Die Datei ist immer noch etwas größer als sie sein sollte (216 KB, wenn sie 205 KB groß sein sollte).

Ich habe mein @ getestgetDOM.js Funktion durch einfaches Herunterladen der Datei, und der gesamte Vorgang ist fast augenblicklich.

Ich bin mir nicht sicher, warum dieser Vorgang so lange dauert, warum die Datei so groß ist oder warum kaum eine der Nachrichten tatsächlich gesendet wird.

Ich bin mir nicht sicher, ob dies etwas mit dem Deserialisieren der Nachricht auf eine bestimmte Weise zu tun hat. Soll ich einen Port erstellen, anstatt das @ zu verwendechrome.runtime.sendNativeMessage(...); -Methode, oder wenn noch etwas fehlt.

Alle Hilfe wird sehr geschätzt! Vielen Dank

BEARBEITE

Obwohl meine Nachricht korrekt von der Nebenstelle an den Host gesendet wird, erhalte ich jetzt einNative host has exited error Bevor die Nebenstelle die Nachricht des Hosts empfängt.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage