myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Performance, wenn in einer Schleife ein Char Array mit Substring abgefragt wird
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Performance, wenn in einer Schleife ein Char Array mit Substring abgefragt wird

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
frameworker
myCSharp.de-Mitglied

Dabei seit: 29.01.2019
Beiträge: 7


frameworker ist offline

Performance, wenn in einer Schleife ein Char Array mit Substring abgefragt wird

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

wenn ich nur ein char Array habe, bspw. dieses:

C#-Code:
char[] charbase = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', ' ', '!', '?', '.' };

und dann aber in einer Schleife staendig per Substr darauf zugreifen muss, muesste man ja andauernd wie folgt vorgehen:

C#-Code:
while ...
{
    Console.WriteLine(new string(charbase).Substring(0,5));
}

Also mal davon abgesehen, ob das so sinnvoll ist oder nicht. Als C# Anfaenger gehe ich davon aus, dass dann ja jedesmal in der Schleife ein neues String-Objekt erstellt wird.
Was sicherlich nicht sinnvoll ist. Oder ist dieses exempl. Konstrukt nur syntaktisch haesslich und C# optimiert das selbst?

Oder kann man auch das Stringobjekt vorher einmal generieren und dann in der Schleife als Referenz darauf zugreifen?

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von frameworker am 29.01.2019 15:41.

29.01.2019 15:14 Beiträge des Benutzers | zu Buddylist hinzufügen
pinki
myCSharp.de-Mitglied

avatar-4072.jpg


Dabei seit: 24.08.2008
Beiträge: 675
Herkunft: OWL


pinki ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo und willkommen frameworker,

was ist denn dein Ziel?
29.01.2019 15:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
frameworker
myCSharp.de-Mitglied

Dabei seit: 29.01.2019
Beiträge: 7

Themenstarter Thema begonnen von frameworker

frameworker ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo pinki,

mir ist unklar, inwieweit sich bestimmte Konstrukte auf die Performance auswirken.

Also Beispiel 1 wäre char Array und in der Schleife ständig new string.
Man könnte natürlich sofort einen normalen String bilden a-z und in der Schleife direkt per substr zugreifen.
Aber dann hätten das char Array und der String zwar denselben Inhalt, aber sie wären zwei unterschiedliche Objekte.

Was ich benötige ist so eine Art C Zeiger vom String Objekt auf das char Array. Denn nur dort ist ja die Substr-Methode vorhanden.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von frameworker am 29.01.2019 15:49.

29.01.2019 15:49 Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.246
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Kann nicht nachvollziehen, was du da versuchst.

Wenn du Performance messen willst, dann kannst du es messen. Dazu gibt es bspw. einen Profiler.

Wenn du Strings in Chars zerlegen willst oder umgekehrt, oder was anderes, dann schau in die Doku. Dort stehen die Methoden, Eigenschaften und Indexer beschrieben, die du dafür benötigst.

 [Tipp] Schau in die Doku! - Möglichkeiten der Informationsgewinnung
29.01.2019 16:29 Beiträge des Benutzers | zu Buddylist hinzufügen
pinki
myCSharp.de-Mitglied

avatar-4072.jpg


Dabei seit: 24.08.2008
Beiträge: 675
Herkunft: OWL


pinki ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wie sich das auf die Performance auswirkt, könntest du mit einem eigenen Benchmark testen.

Suchst du vielleicht etwas wie  Span<T>?
29.01.2019 17:23 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.251
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von frameworker:
bspw. dieses:

Wenn Du von "beispielsweise" redest, können wir halt auch nur "beispielsweise" antworten.

Ein fixer Wert, wie es Char darstellt, kann durchaus performanter sein als eine Referenz, wie es ein String darstellt - und umgekehrt.

Zitat von frameworker:
Was ich benötige ist so eine Art C Zeiger vom String Objekt auf das char Array.

Warum "benötigst" Du das? Was erhoffst Du Dir? Was ist die Anforderung?
Für mich riecht das zunächst nach premature optimization
29.01.2019 19:01 Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.406
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wenn du das (konstante) Objekt einmalig vor der Schleife erstellst, wäre das von der Performance her besser:

C#-Code:
string str = new string(charbase).Substring(0,5);
while (...)
{
    Console.WriteLine(str);
}

Nur wenn die Parameter variabel sind, dann müßtest du den Substring jedesmal innerhalb der Schleife erzeugen (oder aber alle möglichen Strings vorher in einem String-Array erzeugen und speichern).
29.01.2019 19:11 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.365
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist offline Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

In deinem aktuellen Beispiel werden gleich zwei Strings erstellt.
Einmal durch den Konstruktor mit new sowie durch dein Substring.
Je nachdem was du dort machst und wie häufig du es machst, verheißt du nur sinnlos Zeit und RAM.

Keine Ahnung was das Ziel sein soll, aber sinnvoll ist es nicht.
Auch was die Zeiger in C# angeht, kannst du dich zu 99% davon verabschieden.
Den Fall wo du mit Zeigern arbeitest ist im Unmanged Code, was aber nur in bestimmten Fällen sinnvoll ist.
Zu 99% der Zeit macht C# schon alles soweit richtig.
Eine sinnvolle Optimierung deines Codes sehe ich hier nicht, da dein Snippet kein Szeanatio zeigt wo man was optimieren kann.

T-Virus
29.01.2019 19:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
chilic
myCSharp.de-Poweruser/ Experte

Dabei seit: 12.02.2010
Beiträge: 2.018


chilic ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Da scheint tatsächlich noch verschiedenes unklar zu sein. Trotzdem möchte ich auf die eigentliche Frage eingehen. Dass der String natürlich auch außerhalb der Schleife erzeugt werden kann weißt du sicher.

Zitat:
Man könnte natürlich sofort einen normalen String bilden a-z und in der Schleife direkt per substr zugreifen.
Aber dann hätten das char Array und der String zwar denselben Inhalt, aber sie wären zwei unterschiedliche Objekte.

Der String ist ein anderes Objekt als das Array. Das ist doch unabhängig davon wo du ihn generierst.

Du könntest auch gleich einen String erzeugen der aus den gewünschten Zeichen besteht, ohne den Umweg über das Array. Da du das so zeigst, scheint etwas mehr dahinter zu stecken als wir wissen. Wenn du dein tatsächliches Problem lösen willst solltest du mehr darüber erzählen.
30.01.2019 06:03 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 10 Monate.
Der letzte Beitrag ist älter als 10 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 12.12.2019 05:05