Skip to content

Instantly share code, notes, and snippets.

Matt Warren mattwarren

Block or report user

Report or block mattwarren

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
@mattwarren
mattwarren / UnsafeWithoutKeyword.cs
Created Sep 4, 2019 — forked from nguerrera/UnsafeWithoutKeyword.cs
Absence of 'unsafe' C# keyword/switch does not guarantee type or memory safety.
View UnsafeWithoutKeyword.cs
/*
The absence of the C# unsafe keyword and switch does not guarantee code
is type or memory safe. It merely prevents the use of pointer types and
fixed size buffers.
The only thing that can guarantee type and memory safety is
verification and CAS/transparency enforcement.
In particular, the absence of unsafe C# blocks does NOT:
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
{
You can’t perform that action at this time.