Skip to content

Instantly share code, notes, and snippets.

@yallie
Created February 22, 2013 10:13
Show Gist options
  • Save yallie/5012299 to your computer and use it in GitHub Desktop.
Save yallie/5012299 to your computer and use it in GitHub Desktop.
string vs HashSet<char>, version #4.
using System;
using System.Collections.Generic;
using System.Diagnostics;
struct Program
{
static void Main()
{
const int iterations = 100000;
var smallString = "<>*";
var largeString = "@<>d+-0123456789abcdefghijklm<#";
var smallSet = new HashSet<char>(smallString);
var largeSet = new HashSet<char>(largeString);
var smallArray = smallString.ToCharArray();
var largeArray = largeString.ToCharArray();
Benchmark("String, small.", iterations, smallString);
Benchmark("String, large.", iterations, largeString);
Benchmark("HashSet<char>, small.", iterations, smallSet);
Benchmark("HashSet<char>, large.", iterations, largeSet);
Benchmark("char[], small.", iterations, smallArray);
Benchmark("char[], large.", iterations, largeArray);
}
static void Benchmark(string title, int iterations, string set)
{
var sw = Stopwatch.StartNew();
for (var i = 0; i < iterations; i++)
{
set.IndexOf('s');set.IndexOf('%');set.IndexOf('.');set.IndexOf('*');
set.IndexOf('g');set.IndexOf('6');set.IndexOf('q');set.IndexOf('d');
set.IndexOf('l');set.IndexOf('*');set.IndexOf('e');set.IndexOf('s');
set.IndexOf('k');set.IndexOf('&');set.IndexOf('R');set.IndexOf('f');
set.IndexOf('j');set.IndexOf('^');set.IndexOf('H');set.IndexOf('s');
set.IndexOf('h');set.IndexOf(')');set.IndexOf('D');set.IndexOf('k');
set.IndexOf('s');set.IndexOf('(');set.IndexOf('4');set.IndexOf('h');
set.IndexOf('g');set.IndexOf(')');set.IndexOf('r');set.IndexOf('3');
set.IndexOf('l');set.IndexOf('v');set.IndexOf('l');set.IndexOf('2');
set.IndexOf('k');set.IndexOf('x');set.IndexOf('o');set.IndexOf('X');
set.IndexOf('j');set.IndexOf('z');set.IndexOf('i');set.IndexOf('C');
set.IndexOf('h');set.IndexOf('.');set.IndexOf('2');set.IndexOf('B');
set.IndexOf('w');set.IndexOf(',');set.IndexOf('4');set.IndexOf('W');
set.IndexOf('!');set.IndexOf('m');set.IndexOf('0');set.IndexOf('5');
set.IndexOf('s');set.IndexOf('n');set.IndexOf('5');set.IndexOf('6');
set.IndexOf('@');set.IndexOf('b');set.IndexOf(',');set.IndexOf('*');
set.IndexOf('%');set.IndexOf('c');set.IndexOf('n');set.IndexOf('$');
set.IndexOf('^');set.IndexOf('/');set.IndexOf('a');set.IndexOf('%');
}
sw.Stop();
Console.WriteLine("{2} Time elapsed: {0}, single iteration: {1} ms",
sw.Elapsed, sw.Elapsed.TotalMilliseconds / iterations, title);
}
static void Benchmark(string title, int iterations, HashSet<char> set)
{
var sw = Stopwatch.StartNew();
for (var i = 0; i < iterations; i++)
{
set.Contains('s');set.Contains('%');set.Contains('.');set.Contains('*');
set.Contains('g');set.Contains('6');set.Contains('q');set.Contains('d');
set.Contains('l');set.Contains('*');set.Contains('e');set.Contains('s');
set.Contains('k');set.Contains('&');set.Contains('R');set.Contains('f');
set.Contains('j');set.Contains('^');set.Contains('H');set.Contains('s');
set.Contains('h');set.Contains(')');set.Contains('D');set.Contains('k');
set.Contains('s');set.Contains('(');set.Contains('4');set.Contains('h');
set.Contains('g');set.Contains(')');set.Contains('r');set.Contains('3');
set.Contains('l');set.Contains('v');set.Contains('l');set.Contains('2');
set.Contains('k');set.Contains('x');set.Contains('o');set.Contains('X');
set.Contains('j');set.Contains('z');set.Contains('i');set.Contains('C');
set.Contains('h');set.Contains('.');set.Contains('2');set.Contains('B');
set.Contains('w');set.Contains(',');set.Contains('4');set.Contains('W');
set.Contains('!');set.Contains('m');set.Contains('0');set.Contains('5');
set.Contains('s');set.Contains('n');set.Contains('5');set.Contains('6');
set.Contains('@');set.Contains('b');set.Contains(',');set.Contains('*');
set.Contains('%');set.Contains('c');set.Contains('n');set.Contains('$');
set.Contains('^');set.Contains('/');set.Contains('a');set.Contains('%');
}
sw.Stop();
Console.WriteLine("{2} Time elapsed: {0}, single iteration: {1} ms",
sw.Elapsed, sw.Elapsed.TotalMilliseconds / iterations, title);
}
static void Benchmark(string title, int iterations, char[] set)
{
var sw = Stopwatch.StartNew();
for (var i = 0; i < iterations; i++)
{
set.Contains('s');set.Contains('%');set.Contains('.');set.Contains('*');
set.Contains('g');set.Contains('6');set.Contains('q');set.Contains('d');
set.Contains('l');set.Contains('*');set.Contains('e');set.Contains('s');
set.Contains('k');set.Contains('&');set.Contains('R');set.Contains('f');
set.Contains('j');set.Contains('^');set.Contains('H');set.Contains('s');
set.Contains('h');set.Contains(')');set.Contains('D');set.Contains('k');
set.Contains('s');set.Contains('(');set.Contains('4');set.Contains('h');
set.Contains('g');set.Contains(')');set.Contains('r');set.Contains('3');
set.Contains('l');set.Contains('v');set.Contains('l');set.Contains('2');
set.Contains('k');set.Contains('x');set.Contains('o');set.Contains('X');
set.Contains('j');set.Contains('z');set.Contains('i');set.Contains('C');
set.Contains('h');set.Contains('.');set.Contains('2');set.Contains('B');
set.Contains('w');set.Contains(',');set.Contains('4');set.Contains('W');
set.Contains('!');set.Contains('m');set.Contains('0');set.Contains('5');
set.Contains('s');set.Contains('n');set.Contains('5');set.Contains('6');
set.Contains('@');set.Contains('b');set.Contains(',');set.Contains('*');
set.Contains('%');set.Contains('c');set.Contains('n');set.Contains('$');
set.Contains('^');set.Contains('/');set.Contains('a');set.Contains('%');
}
sw.Stop();
Console.WriteLine("{2} Time elapsed: {0}, single iteration: {1} ms",
sw.Elapsed, sw.Elapsed.TotalMilliseconds / iterations, title);
}
}
static class Extensions
{
public static bool Contains(this string str, char c)
{
return str.IndexOf(c) >= 0;
}
public static bool Contains(this char[] inArray, char c)
{
for (int i = 0; i < inArray.Length; i++)
{
if (c == inArray[i])
return true;
}
return false;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment