Skip to content

Instantly share code, notes, and snippets.

View PerfView-Tutorial.md
View BenchmarkDotNet-Tutorial.md
@mattwarren
mattwarren / on-tail-recursion.md
Created Jul 4, 2018 — forked from mrange/on-tail-recursion.md
On the topic of tail calls in .NET
View on-tail-recursion.md

On the topic of tail calls in .NET

Let's say you have implemented a small data pipeline library to replace LINQ.

module TrivialStream =
  type Receiver<'T> = 'T            -> unit
  type Stream<'T>   = Receiver<'T>  -> unit

  module Details =
View ValueLinqBenchmarks.cs
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Attributes.Columns;
using BenchmarkDotNet.Configs;
using BenchmarkDotNet.Running;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
@mattwarren
mattwarren / veh_hook.cpp
Created Jan 5, 2018 — forked from ReubenBond/veh_hook.cpp
INT3 Vectored Exception Handler hooking
View veh_hook.cpp
/**
veh_hook Vectored Exception Handler hooking library
Version: 24-March-2008
**/
#define WINVER 0x0501
#define _WIN32_WINNT 0x0501
#include <windows.h>
#include "veh_hook.h"
static veh_list_t* list = NULL;
@mattwarren
mattwarren / BenchLinearVsBinary.cs
Created Nov 2, 2016 — forked from xoofx/BenchLinearVsBinary.cs
Performance between a linear and binary search on a small ordered set
View BenchLinearVsBinary.cs
/*
Q: At which size is it preferrable to use binary search over a simple linear search for a small ordered set?
R: Under 5 elements, linear search is slightly faster (from 200% to 10% faster)
But in practice, not sure a switch case to select the best method is really worth it
Unless main usecase is having most of the time only 1-2 elements (so it could be optimized manually without a loop and switch to binary otherwise)
At 3-4 elements, linear is only 10-5% faster
Relative performance between linear and binary search:
size x86 x64
View ContinueWithAllocations.cs
[Config(typeof(Config))]
public class ContinueWithAllocations
{
private class Config : ManualConfig
{
public Config()
{
Add(new MemoryDiagnoser());
}
}
@mattwarren
mattwarren / clrmd-sdd-demo.cs
Created May 23, 2016 — forked from goldshtn/clrmd-sdd-demo.cs
CLRMD demo shown at SDD 2016
View clrmd-sdd-demo.cs
using Microsoft.Diagnostics.Runtime;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SDDTriage
{
@mattwarren
mattwarren / GuidCtorBenchmark.cs
Last active Feb 14, 2017
Benchmark of the costs of different ways of creating GUIDs
View GuidCtorBenchmark.cs
// From https://twitter.com/aarnott/status/701653964823990273
public class Framework_Guid
{
[Benchmark(Baseline = true)]
public Guid CtorWithHexValues()
{
// creates a Guid that corresponds to "12345678-000b-000c-0001-020304050607".
return new Guid(0x12345678, 0xb, 0xc, 0, 1, 2, 3, 4, 5, 6, 7);
}
You can’t perform that action at this time.