Skip to content

Instantly share code, notes, and snippets.

@yellis
Last active August 29, 2015 13:56
Show Gist options
  • Save yellis/9110421 to your computer and use it in GitHub Desktop.
Save yellis/9110421 to your computer and use it in GitHub Desktop.
// Bechmarking for http://stackoverflow.com/a/21903029/51
void Main()
{
var sourceList = source.Split(' ', '\n').ToList(); // 2582 items
long numSets = 10000000;
RunTest(sourceList, false, numSets);
RunTest(sourceList, true, numSets);
}
static void RunTest(List<string> sourceList, bool init, long numSets) {
var pattern = @"[aeiou]";
var vowels = new HashSet<char> { 'a', 'e', 'i', 'o', 'u' };
Stopwatch s = new Stopwatch();
s.Start();
for (int i = 0; i < numSets; i++)
{
RegexMethod(sourceList, pattern, init);
}
s.Stop();
Console.WriteLine("RegexMethod (init = {2}) - {0:#,0} words: {1:#,0.#} ms", sourceList.Count() * numSets, s.ElapsedMilliseconds, init);
s.Restart();
for (int i = 0; i < numSets; i++)
{
RegexMethod(sourceList, pattern, init, true);
}
s.Stop();
Console.WriteLine("RegexMethod Compiled (init = {2}) - {0:#,0} words: {1:#,0.#} ms", sourceList.Count() * numSets, s.ElapsedMilliseconds, init);
s.Restart();
for (int i = 0; i < numSets; i++)
{
HashsetMethod(sourceList, vowels, init);
}
s.Stop();
Console.WriteLine("HashsetMethod (init = {2}) - {0:#,0} words: {1:#,0.#} ms", sourceList.Count() * numSets, s.ElapsedMilliseconds, init);
}
static IEnumerable<string> RegexMethod(List<string> source, string pattern, bool init = false, bool compiledRegex = false) {
if (init) {
pattern = @"[aeiou]";
}
var options = RegexOptions.IgnoreCase;
if (compiledRegex) {
options = options & RegexOptions.Compiled;
}
var vNovowels = source.Select(item => Regex.Replace(item, pattern, "", options));
return vNovowels;
}
static IEnumerable<string> HashsetMethod(List<string> source, HashSet<char> vowels, bool init = false) {
if (init) {
vowels = new HashSet<char> { 'a', 'e', 'i', 'o', 'u' };
}
var vNovowels = from vitem in source
select new string(vitem.Where(c => !vowels.Contains(c)).ToArray());
return vNovowels;
}
static string source = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec placerat tempor bibendum. Nunc at augue sed leo elementum egestas. In vel malesuada risus. Curabitur leo diam, sollicitudin ac dolor malesuada, convallis pretium felis. In pretium vel leo in rutrum. Sed cursus tempus diam in placerat. Donec pellentesque sapien non orci aliquam, et fringilla arcu adipiscing. Quisque quis sapien tempus, lacinia erat sit amet, sodales urna. Donec neque nisl, viverra ut tortor eu, aliquam viverra ligula. Morbi vulputate quam tellus. Etiam sollicitudin, tellus ut porta dignissim, purus ipsum imperdiet mauris, non lacinia libero turpis nec diam. Nullam mattis interdum purus, sed convallis felis sagittis sit amet. Morbi varius facilisis aliquet.
Phasellus accumsan condimentum nibh, a viverra mauris consequat nec. Phasellus felis nibh, dictum eget mauris non, mattis tincidunt justo. Nulla lacinia ante id laoreet lacinia. Fusce lobortis nisi id mauris lobortis, id cursus magna ornare. Praesent congue sem non adipiscing sagittis. Curabitur auctor velit pharetra tortor suscipit, ut laoreet nibh sodales. Maecenas a massa velit. Aliquam erat volutpat.
Vestibulum at lectus semper, faucibus libero a, pulvinar dui. Etiam pharetra sem eget sodales tempus. Fusce et leo erat. Etiam consectetur nisi sit amet metus bibendum faucibus. Curabitur a augue congue, congue mi vitae, placerat nibh. Suspendisse scelerisque congue metus, at convallis nunc laoreet sed. Suspendisse nisi felis, accumsan et massa vel, congue aliquet urna. Integer vestibulum fringilla pellentesque. Donec laoreet dignissim justo, non eleifend ligula ultricies non. Fusce nunc est, convallis in ligula sed, tincidunt fringilla ante. Nulla purus tortor, laoreet at viverra in, placerat in sapien. Vivamus ac magna tincidunt, feugiat nisi nec, ullamcorper odio. Praesent scelerisque, arcu tincidunt consequat imperdiet, lorem sapien vehicula est, vel euismod massa est id neque.
Maecenas ante nisi, blandit eget dolor a, aliquam feugiat lorem. Proin tincidunt feugiat justo, vitae aliquet sem fringilla quis. Nullam scelerisque laoreet adipiscing. Maecenas libero eros, rutrum non adipiscing commodo, porta ultricies orci. Sed quis lorem vel sapien aliquam gravida dapibus sed risus. Cras id eros pharetra, fermentum neque a, placerat odio. Donec sed lectus et lorem tristique pulvinar quis vel felis. In id orci et metus eleifend blandit id sed arcu. Suspendisse ac mauris pharetra, lobortis augue quis, gravida nunc. Nulla at libero aliquam, porttitor leo non, dapibus felis. Vestibulum condimentum nisi sed ligula commodo viverra.
Aliquam diam nunc, consequat nec augue non, auctor dictum massa. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Phasellus dignissim lacus sed diam venenatis porta. Quisque bibendum rutrum nunc, id euismod ligula tincidunt aliquam. Donec id velit id arcu tincidunt faucibus. Morbi neque augue, bibendum vel mauris eget, commodo lacinia turpis. Integer rutrum, lorem a volutpat porttitor, magna erat blandit ante, in scelerisque mauris justo quis mauris.
Duis congue pretium consequat. Nam neque sapien, semper eget nisl sit amet, tempor malesuada purus. Vestibulum convallis eros dapibus tristique molestie. In ultricies velit eu nibh euismod, eget facilisis eros mattis. Cras dignissim ligula eget felis ullamcorper, in vulputate mauris dictum. Cras sed feugiat quam. Phasellus non laoreet eros. Nulla sed iaculis velit, eget placerat purus. Suspendisse sodales orci quis porttitor tempor. Morbi volutpat vulputate urna. Donec tristique sapien non eros molestie, eu pharetra diam lobortis. Duis leo nisl, faucibus sit amet feugiat eu, ornare sed turpis. Praesent vehicula eros ante, vitae tempor magna pellentesque quis. Vivamus tempor tincidunt varius. Nam molestie ullamcorper pulvinar. Sed adipiscing quam tortor, quis imperdiet metus viverra vitae.
Sed pellentesque eget lacus luctus sollicitudin. Quisque et nulla cursus, elementum ipsum vitae, egestas tortor. Proin a ligula iaculis, ultricies augue nec, varius purus. In non luctus leo. Donec ut augue sit amet ante lobortis blandit ac ut ligula. Mauris eleifend tortor ut nibh porttitor, non rutrum ipsum dignissim. Donec vestibulum, turpis ut tincidunt semper, est ipsum mollis magna, ac laoreet elit ligula quis risus. Etiam dictum a libero feugiat faucibus. Curabitur sagittis non velit non venenatis. Nullam egestas dapibus lacus, viverra interdum felis semper bibendum. Cras venenatis ornare ultricies. Donec sit amet pharetra risus. Maecenas sit amet nisi ac lorem euismod tincidunt.
Curabitur ullamcorper eros eu molestie mollis. Phasellus posuere est sit amet mi vehicula, dictum tristique mauris tristique. Nunc imperdiet eget mauris quis tempus. Nunc eu lacinia magna. Sed tristique eleifend enim sed dapibus. In congue ante turpis, laoreet viverra leo lobortis eget. Praesent volutpat gravida turpis. Duis ullamcorper imperdiet nisl, nec facilisis nisl varius quis. Maecenas feugiat enim ac consectetur elementum.
Donec accumsan, odio at fermentum molestie, neque quam imperdiet dolor, vitae molestie elit justo quis nisl. Nunc vulputate ipsum in ligula adipiscing, et posuere odio aliquet. Pellentesque suscipit accumsan dui, a varius libero congue non. Nullam in consectetur neque. Praesent non ullamcorper erat. Suspendisse imperdiet tempus felis, eu vehicula massa pulvinar et. Pellentesque accumsan hendrerit lacinia. Donec eu nisl vel eros tristique ornare et et ligula. Suspendisse porttitor sapien sit amet rutrum gravida. Sed at dui sit amet justo congue suscipit et vitae urna. Vivamus in lacus id tellus pharetra consequat. Vivamus ut pulvinar diam. Pellentesque non odio tortor.
Maecenas in bibendum elit. Nam viverra ipsum ut ligula sagittis accumsan. Cras blandit in dui eget sodales. Pellentesque eu nunc porta, tincidunt velit a, placerat libero. Morbi et arcu molestie, scelerisque lorem non, semper tortor. Etiam tellus libero, tempor quis posuere quis, faucibus vitae arcu. Suspendisse aliquet placerat porta. Praesent sit amet porttitor risus, ut luctus leo. Duis fermentum posuere erat sit amet euismod.
Donec tincidunt mattis ligula quis lobortis. Integer porta turpis id magna ultrices malesuada. Nullam in metus at nisl convallis eleifend ac id quam. Praesent vitae malesuada magna. Nunc a nibh varius, ultrices ligula a, egestas dolor. Sed tempus eget sapien sed imperdiet. Nam sapien tortor, congue in adipiscing eu, porta sit amet mi.
Pellentesque ullamcorper, risus adipiscing faucibus aliquam, elit eros dignissim est, in ullamcorper nisi nulla sed felis. Cras quis laoreet sapien, et euismod mauris. Nam elementum metus at placerat consequat. Donec commodo nisl sed viverra cursus. Morbi mattis massa at ligula adipiscing mollis. Nunc ullamcorper quam elit, in adipiscing diam posuere a. Duis ultricies hendrerit nunc hendrerit faucibus. Nullam ut lorem neque. Maecenas gravida sollicitudin sem, et egestas lorem iaculis a. Duis ante mi, malesuada ac leo ac, eleifend fermentum sapien.
Nulla quis nisi sit amet nibh dapibus pharetra. Integer imperdiet lobortis consectetur. Sed mollis nibh lobortis porttitor eleifend. Praesent cursus accumsan diam, at placerat risus interdum eu. Etiam ullamcorper augue eu facilisis facilisis. Ut elit metus, ultricies vitae odio vel, viverra vestibulum ligula. Nulla facilisi. Interdum et malesuada fames ac ante ipsum primis in faucibus. Cras tempor suscipit leo, ac lacinia justo euismod gravida. Donec at sodales nisl. Vivamus lobortis viverra nunc, nec elementum nunc placerat nec. Integer nec interdum lectus. Proin viverra rutrum tortor, a imperdiet justo pellentesque quis. Proin condimentum mattis sapien, et consequat tortor lobortis id. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In interdum molestie purus suscipit faucibus.
Nullam sagittis, ipsum nec rhoncus tempus, mauris justo sodales lorem, non facilisis ligula urna vitae nunc. Fusce et urna diam. Donec mattis pulvinar justo sit amet ullamcorper. Aenean in arcu lectus. Nullam eget pulvinar nibh. Nullam nibh nulla, luctus a felis eget, pretium adipiscing purus. Nunc blandit feugiat mi, facilisis ultrices tellus sollicitudin sit amet. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla quis iaculis turpis, nec vulputate nisi. Vestibulum pulvinar rutrum tellus, sit amet dapibus dolor posuere at. Nulla mattis faucibus quam pretium mattis. Ut scelerisque dapibus sem, sit amet scelerisque risus gravida nec. Nullam egestas nunc sed dolor rhoncus tincidunt. Proin malesuada, erat ullamcorper dapibus imperdiet, quam nibh interdum elit, ac porttitor orci dui at urna.
Praesent imperdiet imperdiet rhoncus. Fusce viverra aliquam ultricies. Quisque aliquet, nunc ut auctor mollis, urna libero sagittis diam, in pellentesque nisi massa in dui. Aliquam adipiscing blandit odio at pharetra. Ut quis augue tortor. Ut ac est at odio adipiscing iaculis non mattis urna. Sed non elit scelerisque, tincidunt odio aliquet, adipiscing nisl.
Praesent imperdiet orci in massa dictum dignissim. Ut aliquam nibh ac fermentum imperdiet. Praesent ornare odio in suscipit convallis. Quisque vehicula elit eu suscipit pretium. Vestibulum aliquet elementum tempus. In at adipiscing dolor. Nam sagittis pharetra aliquam. Phasellus tincidunt, turpis non tincidunt fermentum, felis sem sodales neque, vel pretium justo magna vel erat. Maecenas ornare id lectus ut lobortis. Maecenas porttitor eros neque, vitae vestibulum tellus vestibulum vel. Suspendisse quis nulla massa.
Praesent quam nulla, egestas molestie consequat at, convallis ac urna. Phasellus interdum viverra purus, in tempus nibh blandit a. Etiam vel velit erat. Aliquam a viverra quam, ut pellentesque diam. Suspendisse accumsan ac arcu a porta. Maecenas molestie, erat ac consequat bibendum, nunc elit dignissim enim, quis consectetur dui arcu elementum risus. Aenean pretium ullamcorper fermentum.
Maecenas fermentum tellus ut odio imperdiet, eget fermentum velit aliquet. Morbi luctus sapien in justo ullamcorper, vitae convallis mi placerat. Nulla facilisi. Sed ut diam et eros semper mattis a vel sem. Suspendisse potenti. Fusce nec augue consequat, accumsan felis vitae, semper nulla. Duis vulputate enim lacus, a vulputate nisi ultricies in. Aliquam dui nisi, cursus eu lectus sit amet, iaculis congue urna. Donec lacinia consectetur nulla id elementum.
Maecenas et eros sit amet sem tempor lacinia ut sit amet nisi. Fusce porta mauris lectus, ac pretium neque semper eu. Aliquam iaculis ac nibh sit amet aliquam. Proin at massa tristique, ultricies sem id, vestibulum purus. Morbi viverra tristique tellus nec condimentum. Sed et orci ipsum. Vivamus egestas diam eros, tristique convallis risus viverra pellentesque. Morbi sit amet dignissim nibh. Mauris dapibus neque dolor, ut interdum ipsum aliquet ut. Aliquam condimentum, magna eu accumsan scelerisque, lacus est vulputate ipsum, non fermentum neque orci nec nisi.
Pellentesque orci metus, placerat nec porta laoreet, pharetra facilisis massa. Suspendisse urna erat, pharetra at nisl sed, lobortis venenatis ante. Quisque eu lacus orci. Donec a dictum libero. Aliquam ac enim nec felis malesuada suscipit a sed leo. Proin venenatis nisi ipsum, eget dictum turpis venenatis vel. Sed nec lectus posuere, lobortis lacus quis, ullamcorper diam. Integer vestibulum elit non turpis lobortis tempor. Donec fringilla eros ac massa porta sollicitudin. Morbi suscipit est id velit hendrerit aliquet. Maecenas eleifend nunc vulputate ligula tincidunt placerat. Duis id tincidunt ligula, vel pellentesque erat. Sed at blandit elit. Suspendisse aliquet, arcu nec luctus placerat, tellus ante pellentesque orci, a tempor mi elit ac augue. Quisque ut tortor in augue mollis pellentesque. Morbi a aliquam sem, a tempus risus.
Mauris mollis velit pulvinar sodales viverra. Donec id malesuada orci, vel facilisis orci. Vestibulum eget orci varius, tincidunt neque id, dictum felis. Nunc dapibus, odio non scelerisque placerat, felis odio vestibulum quam, sed dictum eros elit eu purus. Nullam sed risus sodales, molestie metus pharetra, fermentum massa. Nullam lectus arcu, pellentesque eu enim vitae, ultrices condimentum sem. Morbi quis mollis diam. Curabitur nec consequat massa. Vestibulum sed libero at eros hendrerit sollicitudin. Curabitur a feugiat mauris, a interdum lorem.
Etiam placerat, magna eget euismod consectetur, velit metus eleifend quam, sed scelerisque mauris odio quis dolor. Etiam congue lectus at bibendum tincidunt. Nulla facilisi. Suspendisse et semper neque. Maecenas sodales lectus nec sapien facilisis, vel lacinia mauris congue. Integer sit amet urna adipiscing, tempus purus ut, varius quam. Nullam gravida at eros sed convallis. Aenean metus justo, blandit eget hendrerit eu, fringilla et lorem. Aenean ullamcorper lectus at sem venenatis elementum.
Pellentesque commodo, augue ut ultricies vulputate, nisi arcu malesuada nunc, ut vehicula massa augue ac purus. Sed in ipsum quis quam dictum hendrerit. Nulla ac orci ut velit convallis rutrum. Suspendisse ac magna eu nisi rhoncus fringilla. Phasellus vulputate neque quis tincidunt lacinia. Nullam id sodales neque. Nullam sed scelerisque enim, accumsan tincidunt urna. Sed viverra erat eget orci imperdiet, nec sagittis risus scelerisque.
Proin porttitor nunc sed magna faucibus lacinia. Pellentesque eget orci nunc. Quisque cursus iaculis interdum. Suspendisse a suscipit lorem, vitae euismod metus. Nulla eu vulputate magna. Maecenas vitae gravida dui. Integer consequat sed ligula et fringilla. Aliquam vulputate venenatis dolor nec ullamcorper. Quisque et mauris laoreet, feugiat felis et, eleifend urna. Vivamus non erat venenatis, commodo risus vitae, ultricies leo. Aliquam vehicula venenatis mi, in accumsan purus rutrum et. Fusce faucibus accumsan orci auctor blandit. Cras elit felis, adipiscing vel placerat sed, vulputate id arcu. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec pellentesque lectus in lorem malesuada tempor. Nam pharetra tellus nec dui ultricies congue.
Vivamus ut posuere metus. Pellentesque cursus nibh in neque congue, vel condimentum est pretium. Aliquam non sem ac erat adipiscing vehicula quis vel nibh. Cras enim libero, sodales sed justo et, scelerisque placerat nunc. In consectetur fringilla odio, nec vehicula justo imperdiet eget. Integer gravida feugiat erat, a semper risus suscipit a. Integer justo felis, aliquet sed pulvinar ut, varius a purus. Sed enim justo, suscipit non quam sed, vulputate venenatis quam. Pellentesque tempor viverra purus vitae vehicula. Vestibulum posuere augue id nunc condimentum fermentum. Pellentesque commodo, arcu at euismod ultricies, metus lectus egestas odio, vel scelerisque nunc purus et purus.
Vestibulum mollis faucibus nulla, eget lacinia lectus vestibulum vel. Fusce ut purus in sem venenatis molestie vitae id magna. Sed eu lectus varius, lobortis erat sit amet, pulvinar arcu. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum eu magna ac neque ultrices pellentesque. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Maecenas bibendum eleifend elit, nec ornare nunc porttitor eu. Aliquam vel lectus in magna accumsan rutrum. Ut auctor ultrices auctor. Phasellus tempus rutrum urna quis ullamcorper. Cras fermentum pharetra scelerisque.
Vivamus pharetra suscipit diam nec lobortis. Praesent aliquam a tortor molestie euismod. Integer nunc massa, tincidunt eget lacinia id, tincidunt ut turpis. Vivamus sit amet libero ut velit placerat convallis. Curabitur quis blandit orci, eu eleifend mi. In hendrerit tellus eu orci malesuada fermentum. Nulla eros arcu, dictum quis molestie quis, commodo in enim. Vivamus eu lobortis arcu, at condimentum purus. Vestibulum viverra tellus dignissim ante dapibus pulvinar. Nullam ultrices imperdiet mollis. Phasellus eu orci ac metus dignissim ornare ac eu elit.
Aenean interdum velit id sapien commodo, at laoreet purus tincidunt. Nulla eget tincidunt sem. Morbi lacinia accumsan pulvinar. Pellentesque vel nisi vel tellus consectetur adipiscing nec eu turpis. Donec eget egestas magna. Praesent sollicitudin nunc eget aliquam tristique. Aliquam dapibus massa mi, quis lobortis arcu iaculis ut.
Praesent ut fringilla elit. Sed in rhoncus purus. Morbi fermentum congue magna eu viverra. Proin feugiat bibendum lobortis. Maecenas aliquam erat nec tortor volutpat luctus. Nunc malesuada felis ligula. Cras congue malesuada placerat. Donec congue tempor nibh, ut cursus tortor ultrices nec. Vestibulum cursus semper purus, ut vestibulum quam interdum id. Sed non venenatis orci. Aliquam ac dictum magna, suscipit tristique nisi. Nulla interdum vestibulum eros, non pulvinar ligula pharetra eget. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nunc pulvinar blandit risus in mattis.
Proin quam urna, tincidunt sed semper id, pellentesque a dolor. Nullam enim nibh, aliquet ac ante eget, commodo sagittis nisi. Nam nec purus mauris. Donec et quam dignissim, euismod eros a, pretium lacus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed lobortis eros eget porta fermentum. Aenean semper eros nisl, nec elementum arcu imperdiet vitae. Sed fermentum, nisl commodo porttitor tincidunt, nisl erat auctor augue, non ullamcorper nisl augue in justo. Phasellus semper lectus a elit consectetur hendrerit.";
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment