Super ! Ce serai bien de parler de pourquoi LINQ est mauvais ici : => On utilise un Any(LongChaine) et un Contains(voyelle) => Complexité de O(taille de LongChaine * taille de voyelle) => O(N*M). Alors que avec IndexOfAny (ou la regex), on utilise la methode optimisé de la classe String + une complexité de O(N)
Parfois quand je suis autant dans l'optimisation, je me demande si ce serait pas plus utile directement de passer par du code compilé en C++, et appeler la fonction dans la Dll directement en Csharp pour optimiser la rapidité d'une fonction ? Qu'en penses tu ?
Justement, Microsoft en est revenu de ça 😉 Avec les optis de dotnet core, ils préfèrent rester 100% en managé car l’interop n’est pas transparent et avec tout le contexte le compilateur JIT peut bien optimiser
@@HTSCoding Intéressant, c'est toujours bon à savoir. Étant donné que nous travaillons sur un moteur de backtesting dans le trading, l'optimisation peut s'avérer cruciale. Cependant, je pense qu'en règle générale, les optimisations passent d'abord par un code mieux conçu, avant d'être portées sur des aspects de plus bas niveau.
@@bulltrading-fr Je bosse aussi pour un client qui fait du trading de matière première, donc oui, je comprends bien le point. Néanmoins, il faut être vigilant sur le côté "code mieux conçu", car pour certains, ça veut dire mieux architecturé, mais très souvent, la performance vient avec des patterns que certains peuvent considérer comme des "anti-patterns". Disons qu'il faut toujours être courant du coût que représente un certain algo en terme de conso mémoire et/ou cpu
@@HTSCoding je n'arrive pas à appliquer l'une des autres méthodes avec mon cas d'usage où je dois returner la chaine sans "-" . T'as un conseil? string items="aaa;-bbb;ccc,ddd-,eee;fff"; var itemsSansTiré=items.Split(';').Where(m => !m.Contains('-')); return string.Join(";", itemsSansTiré)
Je n'arrive pas à appliquer l'une des autres methodes dans mon cas d'usage où je dois recuper la chaine avec des items sans "-". T'as un conseil? string items="aaa;-bbb;ccc;ddd-;eee;ff-f"; var itemsSansTiré=items.Split(';').Where(m =>! m.Contains('-')); return string.Join(";", itemsSansTiré)
EDIT : je viens de relire le truc, j'avais lu trop vite. Tu sais quoi ? je vais en faire une nouvelle vidéo "question d'un abonné" pour aller plus en profondeur ;-)
Super ! Ce serai bien de parler de pourquoi LINQ est mauvais ici :
=> On utilise un Any(LongChaine) et un Contains(voyelle) => Complexité de O(taille de LongChaine * taille de voyelle) => O(N*M).
Alors que avec IndexOfAny (ou la regex), on utilise la methode optimisé de la classe String + une complexité de O(N)
Parfois quand je suis autant dans l'optimisation, je me demande si ce serait pas plus utile directement de passer par du code compilé en C++, et appeler la fonction dans la Dll directement en Csharp pour optimiser la rapidité d'une fonction ? Qu'en penses tu ?
Justement, Microsoft en est revenu de ça 😉
Avec les optis de dotnet core, ils préfèrent rester 100% en managé car l’interop n’est pas transparent et avec tout le contexte le compilateur JIT peut bien optimiser
@@HTSCoding Intéressant, c'est toujours bon à savoir. Étant donné que nous travaillons sur un moteur de backtesting dans le trading, l'optimisation peut s'avérer cruciale. Cependant, je pense qu'en règle générale, les optimisations passent d'abord par un code mieux conçu, avant d'être portées sur des aspects de plus bas niveau.
@@bulltrading-fr Je bosse aussi pour un client qui fait du trading de matière première, donc oui, je comprends bien le point. Néanmoins, il faut être vigilant sur le côté "code mieux conçu", car pour certains, ça veut dire mieux architecturé, mais très souvent, la performance vient avec des patterns que certains peuvent considérer comme des "anti-patterns". Disons qu'il faut toujours être courant du coût que représente un certain algo en terme de conso mémoire et/ou cpu
Les autres méthodes sont hyper optimisées comparées à LINQ que j'utilise à 100%. C'est super ça, merci Christophe
Excellent, une bonne solution pour ne plus dépendre de LINQ pour ce cas d'usage alors :-)
@@HTSCoding je n'arrive pas à appliquer l'une des autres méthodes avec mon cas d'usage où je dois returner la chaine sans "-" . T'as un conseil?
string items="aaa;-bbb;ccc,ddd-,eee;fff";
var itemsSansTiré=items.Split(';').Where(m => !m.Contains('-'));
return string.Join(";", itemsSansTiré)
Je n'arrive pas à appliquer l'une des autres methodes dans mon cas d'usage où je dois recuper la chaine avec des items sans "-". T'as un conseil?
string items="aaa;-bbb;ccc;ddd-;eee;ff-f";
var itemsSansTiré=items.Split(';').Where(m =>! m.Contains('-'));
return string.Join(";", itemsSansTiré)
EDIT : je viens de relire le truc, j'avais lu trop vite. Tu sais quoi ? je vais en faire une nouvelle vidéo "question d'un abonné" pour aller plus en profondeur ;-)