2016-05-13 18 views
0

Eingebettete Ressourcen wird nur verwendet, um eine Datei als Binärteil zu kompilieren?Eingebettete Ressourcen - resx - Leistung - C#

Ist es eine gute Idee, eingebettete Ressourcen aus Performancegründen zu verwenden?

Diese Frage betrifft

  • XML-Dateien als eingebettete Ressourcen
  • Resx Dateien (Strings) gespeichert

In den beiden Fällen gleiche Performance-Vorteil gibt es: einige Caching-Strategie, oder etwas ähnliches (da es wie Quellcode/Assemblys verwaltet werden kann).

Zum Beispiel anstelle der Resx, ich kann eine Hash-Tabelle (in letzter Zeit erstellt) verwenden. In meinem Fall könnte diese Hashtabelle so groß sein, um für immer in Erinnerung zu bleiben. Also Resx ist es eine Hilfe mit einigen Cache-Strategie?

Ich habe das gleiche Problem für ein Baumobjekt. Es könnte mir nicht helfen, eine eingebettete XML-Datei zu verwenden, oder sollte ich die gesamte Cache-Strategie implementieren?

DENKT

Antwort

2

Die eingebetteten Ressource-Funktion in erster Linie weil aus Performancegründen hinzugefügt wurde. Es gibt keine Möglichkeit, es schneller auf einem Demand-Seite virtuellen Speicherbetriebssystem wie Windows zu machen. Sie erhalten den vollen Vorteil einer speicherabgebildeten Datei zum Lesen des Ressourceninhalts.

Das ist nicht massiv besser als das Lesen einer separaten Datei, aber Sie bezahlen nicht dafür, dass Sie die Datei finden müssen. Das ist normalerweise die kostspielige Operation auf kleinen Ressourcen und beeinflusst stark die Kaltstartzeit einer App. Es ist ein sehr praktischer Vorteil, keine großen Dateien zu verteilen.

Sie belegen Speicher natürlich, aber es ist virtuelle Speicher. Nur Zahlen an den Prozessor, jeweils eine für alle 4096 Bytes. Auch die billige Art von virtuellem Speicher wird durch die ausführbare Datei anstelle der Auslagerungsdatei gesichert. Sie zahlen nicht wirklich und beginnen, RAM zu verwenden, bis Sie auf die Ressource in Ihrem Programm zugreifen. Dieser RAM wird normalerweise bald wieder freigegeben, wenn Sie die Ressource nicht wiederholt verwenden. Es gibt eine Obergrenze für die Menge der Ressourcendaten, die Sie einbetten können, bei 2 Gigabyte.

Damit sie als XML-Ressource nur zum Zeitpunkt der Erstellung gestartet werden, wird sie vom Tool "Resgen.exe" in ein binäres BLOB umgewandelt, bevor es in die ausführbare Datei eingebettet wird. Der Vorteil von XML ist, dass es gut mit der IDE zusammenspielt und die Wiederherstellung der ursprünglichen Ressource erleichtert, nachdem Sie das ursprüngliche Kunstwerk verloren haben.