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
- 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.
- 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.
- Możesz również określić pojemność liczbową StringBuilder w C #.
StringBuilder s = nowy StringBuilder (10);
StringBuilder s = nowy StringBuilder („wartość obiektu”, 15) ;. - 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
- Nie ma wielu lokalizacji pamięci, którymi mógłby zająć się C #.
- Dynamiczne rozszerzanie obiektu aż do pojemności.
- 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-
- StringBuffer vs StringBuilder
- Instrukcja C # if
- C # do-while loop
- Funkcje ciągów C #