2 Stimmen

Warum sind Saiten notorisch teuer?

Was macht die Implementierung von Zeichenketten so teuer in der Handhabung?

Ist es unmöglich, eine "billige" String-Implementierung zu erstellen?

oder habe ich das völlig falsch verstanden?

Gracias

1voto

Imagist Punkte 17215

Untersuchen Sie veränderbare Zeichenketten, unveränderbare Zeichenketten und Seile und überlegen Sie, wie Sie gängige Operationen in einer Niedrigsprache (z. B. C) implementieren würden. Überlegen Sie:

  1. Verkettung.
  2. Schneiden.
  3. Ein Zeichen auf einen Index setzen.
  4. Ändern eines Zeichens an einem Index.
  5. Suche nach dem Index eines Zeichens.
  6. Durchqueren der Zeichenkette.

Wenn Sie Algorithmen für diese Situationen entwickeln, bekommen Sie ein Gefühl dafür, wann welche Art der Speicherung sinnvoll ist.

0voto

liori Punkte 38648

Wenn Sie eine universelle Saite wollen, die unter allen Bedingungen funktioniert, müssen Sie in einigen Fällen Abstriche bei der Effizienz machen. Dies ist ein klassischer Kompromiss zwischen einer schnellen und einer anderen Sache. Also... entweder Sie verwenden eine "Standard"-String, die richtig funktioniert (aber nicht optimal), oder eine String-Implementierung, die in einigen Fällen sehr schnell und in anderen umständlich ist.

Manchmal braucht man Unveränderlichkeit, manchmal zufälligen Zugriff, manchmal schnelle Einfügungen/Löschungen...

0voto

Laserallan Punkte 10724

Das Ändern und Kopieren von Zeichenketten erfordert in der Regel eine Speicherverwaltung.

Die Speicherverwaltung ist nicht gut für die Leistung, da sie in der Regel eine Art von globalem Mutex erfordert, was die Skalierung des Codes auf mehrere Kerne erschwert.

0voto

JCCyC Punkte 15224

Sie sollten diesen Artikel von Joel Spolsky lesen:

http://www.joelonsoftware.com/articles/fog0000000319.html

Ich bin enttäuscht, dass .NET keinen nativen Typ namens F***edString .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X