Wprowadzenie do Czym jest StringBuilder w C #

Poniższy artykuł, Czym jest StringBuilder w C #, zawiera zarys StringBuilder w C #. Zanim zaczniemy mówić o StringBuilder, najpierw zobaczmy pojęcie niezmienności, jeśli znasz się na ciągach, prawdopodobnie prawdopodobnie będziesz wiedział, że ciągi mają charakter niezmienny, tj. Za każdym razem, gdy tworzony jest nowy obiekt i do niego dostarczana jest nowa lokalizacja pamięci, a więc za każdym razem, gdy dane nastąpi zmiana, zmienione dane należy umieścić w nowej lokalizacji w pamięci i zachować oryginalny ciąg znaków. Teraz nie płaćmy za wiele. Jaki jest przykład zastosowania tego podejścia? Cóż, jeśli ustawiasz poświadczenia, takie jak szczegóły bazy danych, inne poświadczenia, które nie zostaną zmienione w czasie przejściowym, możesz użyć String, aby je zabezpieczyć. Teraz pojawia się inny rodzaj obiektu, tak zwany StringBuilder, tj. Zmienny z natury, dlatego oszczędza pamięć, umożliwiając modyfikację danych tylko w bieżącej lokalizacji pamięci. Takie rzeczy przydają się, gdy chcesz mieć wiele operacji dołączania, które staną Ci na drodze.

Definicja StringBuilder w C #

StringBuilder to klasa reprezentująca zmienny zestaw znaków i jest to obiekt Systemu. Przestrzeń nazw tekstowych. StringBuilder jest z natury dynamicznym obiektem i dlatego StringBuilder nie tworzy nowego obiektu w pamięci, a raczej dynamicznie rozszerza wymaganą pamięć w celu włączenia zmodyfikowanego lub nowego łańcucha. Konstruktory ciągów nie wydają się przekonujące w środowisku wielowątkowości, ponieważ mogą powodować niespójność danych, gdy są zapisywane przez wiele wątków, jeśli koncepcja wielowątkowości nie jest właściwie używana.

Zrozumienie StringBuilder

  1. Teraz nadszedł moment, w którym należy zrozumieć, do czego może prowadzić zmienność wyników, powinieneś wybrać stosowanie zmienności tylko wtedy, gdy ten sam zestaw danych będzie się dynamicznie rozszerzał. Weźmy przykład, aby zrozumieć ten scenariusz.
  2. Jeśli pobierasz niektóre dane z formularza HTML, który ma być przechowywany w tabeli w oparciu o logikę biznesową, która najpierw zweryfikuje dane, w takim przypadku możesz utworzyć obiekt StringBuilder i dołączyć wszystkie pola danych, w powiązaniu z kolumny bazy danych i na koniec mogą wykonać zapytanie wstawiania, aby umieścić to wszystko w bazie danych, zaletą takiego podejścia jest to, że przez cały czas nie należy przydzielać nowej lokalizacji pamięci. A C # będzie zarządzał tą jedną lokalizacją pamięci z dynamicznym rozszerzaniem dla Ciebie.
  3. Możesz również określić pojemność liczbową StringBuilder w C #.
    StringBuilder s = nowy StringBuilder (10);
    StringBuilder s = nowy StringBuilder („wartość obiektu”, 15) ;.
  4. StringBuilder. Właściwość Length wskazuje liczbę znaków, które aktualnie zawiera obiekt StringBuilder. Jeśli dodasz znaki do obiektu StringBuilder, jego długość będzie rosła, aż będzie równa rozmiarowi StringBuilder.

W jaki sposób StringBuilder w C # sprawia, że ​​praca jest tak łatwa?

W C # istnieją pewne metody, które ułatwiają pracę z StringBuilder. Klasa StringBuilder udostępnia następujące metody ułatwiające zadanie programisty -

  • Append (String val) - służy do dołączania wartości ciągu obiektu na końcu bieżącego obiektu StringBuilder.

Przykład -

StringBuilder a = new StringBuilder(“val”, 10);
a.append(“us”) when you do console.writeline(a), it will give you result “value”

  • Append (Format) - służy do formatowania ciągu wejściowego do określonego formatu, a następnie dołączenia go.

Przykład -

StringBuilder a = new StringBuilder(“val”, 10);
a.appendFormat(“(0:C)”, 10)

Wykonaj to uprzejmie i przeanalizuj zmianę wykonaną w prostej metodzie append ().

  • Wstaw (indeks wewnętrzny, wartość ciągu) - wstawia ciąg o określonym indeksie w obiekcie StringBuilder.

Przykład

StringBuilder a = new StringBuilder(“val”, 10); a.insert(4, ”ue”)

Wykonaj i zobacz wynik

  • Istnieją również inne metody i wiele wariantów wyżej wymienionych metod, dla tych proszę odnieść się do:

Link: https://docs.microsoft.com/en-us/dotnet/api/system.text.stringbuilder?view=netframework-4.8

Co możesz zrobić z StringBuilder?

  • StringBuilder ma wiele właściwości, metod i konstruktorów do rozwiązywania problemów z kodowaniem, tak jak widzieliśmy konstruktora StringBuilder (), istnieją warianty takie jak StringBuilder (String, Int32, Int32, Int32) - zainicjuje to nowe wystąpienie klasy StringBuilder z wspomniany substring i jego pojemność.
  • Istnieją właściwości takie jak - długość, pojemność, maksymalna pojemność.
  • Istnieją metody takie jak - appendLine (), Equals (object), GetHashCode (), GetType (), Remove (int32, int32), Replace (char, char), toString ().

Wszystko to sprawia, że ​​zadanie kodowania typowych problemów biznesowych jest łatwe i wymaga mniejszej liczby wierszy kodu.

Pracujesz z StringBuilder w C #?

  • Utworzenie wystąpienia obiektu StringBuilder przez wywołanie konstruktora StringBuilder (Int32, Int32) może spowodować, że długość i pojemność instancji StringBuilder wzrosną poza wartość właściwości MaxCapacity. Przede wszystkim może się tak zdarzyć, gdy wywołasz metody Append (String) i AppendFormat (String, Object) w celu dołączenia małych ciągów.
  • Jeśli liczba dodanych znaków powoduje, że długość obiektu StringBuilder przekracza jego bieżącą pojemność, przydzielana jest nowa pamięć, wartość właściwości Capacity jest podwojona, nowe znaki są dodawane do obiektu StringBuilder, a właściwość Length jest dostosowywana.
  • Po osiągnięciu maksymalnej pojemności żaden dalszy przydział pamięci dla obiektu StringBuilder nie jest możliwy, a jeśli w każdym przypadku zostanie dokonane rozszerzenie poza jego maksymalną pojemność, prawdopodobnie wyrzuci którykolwiek z dwóch wymienionych błędów.

- ArgumentOutOfRangeException.
- Wyjątek OutOfMemoryException.

Zalety

  1. Nie ma wielu lokalizacji pamięci, którymi mógłby zająć się C #.
  2. Dynamiczne rozszerzanie obiektu aż do pojemności.
  3. Można go przekonwertować na ciąg znaków i odwrotnie.

Dlaczego powinniśmy używać StringBuilder w C #?

  • Widać, że ciąg podąża za operacjami konkat, a StringBuilder podąża za operacją dołączania, a append wydaje się być szybszy niż konkat, ponieważ concat musi przydzielić nową lokalizację pamięci, której nie musi wykonywać StringBuilder.
  • Jeśli dane są przejściowe, tj. Nietrwałe i będą się różnić w zależności od różnych wywołań, można użyć StringBuilder, pod warunkiem, że pracujesz bez wielowątkowości, w przeciwnym razie problemem będzie bezpieczeństwo wątków.

Dlaczego potrzebujemy StringBuilder w C #?

Cóż, omówiliśmy to tylko w powyższych punktach i tutaj można wywnioskować przypadki użycia, w których może to być przydatne.

Wniosek

Stąd widzieliśmy różnicę między ciągiem a StringBuilder, kiedy należy używać, co i jakie są wyzwania lub wyjątki, które mogą pojawić się podczas pracy z StringBuilders.

Polecane artykuły

To był przewodnik po What jest StringBuilder w C # ?. Tutaj omówiliśmy Definicja, zrozumienie, praca w StringBuilder w C # z zaletami i przykładami, jak korzystać? Dlaczego tego potrzebujemy? i dlaczego powinniśmy go używać ?. Możesz także przejrzeć nasze inne sugerowane artykuły, aby dowiedzieć się więcej-

  1. StringBuffer vs StringBuilder
  2. Instrukcja C # if
  3. C # do-while loop
  4. Funkcje ciągów C #