Comme quoi, il faut toujours mesurer et benchmarker, encore plus par rapport à son propre scénario :-) (je t'avoue que j'aurais pensé la Regex source-gen comme étant aussi assez perf)
Merci Christophe pour la vidéo ! Après la question (je pense) est assez vite répondu, quand on sais comment fonctionne la "famille" des Span, et que c'est sur la pile, L'usage des Span se rapproche très fortement sur la vision qu'on pourrait avoir en C++
Hello, Je ne sais pas utiliser le benchmarking (mais si un jour tu fais une vidéo dédiée... ;) ) J'ai toujours utilisé les outils fournit par le c# de base comme le replace et autre extension de String que je trouve pas mal utile. DateTime d1 = DateTime.Now; //pour le bench string items = "aaa;-bbb;ccc;ddd-;eee;ff-f"; StringBuilder sfinal = new(); foreach (String s in items.Split(';')) { sfinal.Append(s.Contains('-') ? s.Replace("-", "") : s).Append(";"); } //bench et affichage DateTime d2 = DateTime.Now; double ms = (d2 - d1).TotalMilliseconds; Console.WriteLine(sfinal); Console.WriteLine(ms.ToString()); J'arrive à 7 ms Et si c'est juste les - à virer sans s'occuper des blocs alors seulement le replace est utile. A+ Olivier
Pour la partie benchmarking, j'avais fait une vidéo à l'époque qui a finit en vidéo réservée aux membres. Pour ce qui est de la proposition, le souci avec cette approche, c'est que ça remplace les "-", ça ne supprime pas du retour les éléments qui les contiennent (ce qui était la demande initiale). S'il s'agit d'un simplement remplacement, je pense que tu n'a même pas besoin de Split, juste à faire un Replace sur la chaine directement pour obtenir une nouvelle chaîne (et ce sera plus efficace niveau consommation mémoire ;-) )
@@HTSCoding J'avais mal compris la demande d'enlever les blocks avec - Dans ce cas, l'approche reste la même : on remplace sfinal.Append(s.Contains('-') ? s.Replace("-", "") : s.Append(";"); par if (!s.Contains('-')) sfinal.Append(s).Append(';'); Et ça ne rajoute que les blocks sans le "-" dans la chaine final et toujours 7ms.
tres cool comme format !
Merci Christophe pour cette vidéo et ce format
Salut Christophe, sympa comme format. Je n'aurais pas imaginé la Regex si loin en termes de performance/consommation.
Comme quoi, il faut toujours mesurer et benchmarker, encore plus par rapport à son propre scénario :-) (je t'avoue que j'aurais pensé la Regex source-gen comme étant aussi assez perf)
Merci Christophe pour la vidéo !
Après la question (je pense) est assez vite répondu, quand on sais comment fonctionne la "famille" des Span, et que c'est sur la pile,
L'usage des Span se rapproche très fortement sur la vision qu'on pourrait avoir en C++
Hello, Je ne sais pas utiliser le benchmarking (mais si un jour tu fais une vidéo dédiée... ;) )
J'ai toujours utilisé les outils fournit par le c# de base comme le replace et autre extension de String que je trouve pas mal utile.
DateTime d1 = DateTime.Now; //pour le bench
string items = "aaa;-bbb;ccc;ddd-;eee;ff-f";
StringBuilder sfinal = new();
foreach (String s in items.Split(';'))
{
sfinal.Append(s.Contains('-') ? s.Replace("-", "") : s).Append(";");
}
//bench et affichage
DateTime d2 = DateTime.Now;
double ms = (d2 - d1).TotalMilliseconds;
Console.WriteLine(sfinal);
Console.WriteLine(ms.ToString());
J'arrive à 7 ms
Et si c'est juste les - à virer sans s'occuper des blocs alors seulement le replace est utile.
A+
Olivier
Pour la partie benchmarking, j'avais fait une vidéo à l'époque qui a finit en vidéo réservée aux membres.
Pour ce qui est de la proposition, le souci avec cette approche, c'est que ça remplace les "-", ça ne supprime pas du retour les éléments qui les contiennent (ce qui était la demande initiale). S'il s'agit d'un simplement remplacement, je pense que tu n'a même pas besoin de Split, juste à faire un Replace sur la chaine directement pour obtenir une nouvelle chaîne (et ce sera plus efficace niveau consommation mémoire ;-) )
@@HTSCoding J'avais mal compris la demande d'enlever les blocks avec -
Dans ce cas, l'approche reste la même : on remplace
sfinal.Append(s.Contains('-') ? s.Replace("-", "") : s.Append(";");
par
if (!s.Contains('-')) sfinal.Append(s).Append(';');
Et ça ne rajoute que les blocks sans le "-" dans la chaine final et toujours 7ms.
Oui, c'est sûr, mais niveau mémoire, ton Split pour le foreach va créer en mémoire un tableau de N string (correspondant à chacun des blocs)