2016-09-25 1 views
0

Ich muss die Anzahl der Speicherzuweisungen in einer Textverarbeitung innere Schleife minimieren, die eine Anzahl von Aufrufen an Regex.Matches() enthält. Also, die Frage, eine Textlänge (in Zeichen) gegeben t, eine RegexMuster Länge (in Zeichen) von r und die Anzahl der Spiele m, was ist die ungefähre Anzahl der Speicherzuweisungen durch Regex.Matches(), und was ist die Größe diese Zuweisungen? Sind diese von einer der Regex Optionen beeinflusst?Wie viele Zuordnungen werden von Regex.Matches() intern ausgeführt?

Ich habe versucht, durch die source code von Regex und die damit verbundenen Klassen, aber ist durch ihre Komplexität behindert. Habe auch nicht viel Dokumentation im Web gefunden, die sich auf die Speichernutzung von Regex.Matches() bezieht. Daher die Frage. Speicher-Profiler

+0

Ein Regex ist so etwas wie ein FSM, also sollte es nicht mehr Platz einnehmen als der Speicher (wahrscheinlich eine Hash-Tabelle?), Um es zu speichern und wahrscheinlich etwas mehr Platz für Backtracking. Es würde also von den Einstellungen und der tatsächlichen Regex beeinflusst werden (die Regex-Länge hat nichts damit zu tun, ihre Komplexität und die Verwendung bestimmter Features), die Anzahl der Übereinstimmungen sollte keine Rolle spielen (abgesehen von den tatsächlichen Ergebnissen, die ich vermute). Hast du schon Profiling probiert? – MarZab

+0

Ich verstehe das Konzept bereits; Um die Umsetzung geht es in der Frage. – bright

Antwort

1

Get wie ein JetBrains dotMemory, Profil eine einfache Anwendung regulären Ausdruck und Blick auf die memory traffic von Regex.Matches oder anderen Verfahren hergestellt Sie sind insterested. Es ist die einfachste und genaueste Art und Weise, wie viele Zuordnungen zu lernen tut Regex.Matches(). Speicherprofiler, der in Visual Studio eingebettet ist, zeigen keine Informationen zum Speicherdatenverkehr, AFAIK, andere kommerzielle Profiler sollten dies tun.

Verwandte Themen