This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.IO; | |
using CecilTool; | |
using Mono.Cecil; | |
namespace CecilTool | |
{ | |
/// <summary> | |
/// Simple tool using Mono.Cecil to dump the list of usage of internals methods/fields |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | Method | Mean | Error | StdDev | | |
// |------------- |----------:|----------:|----------:| | |
// | Calli | 0.6718 ns | 0.0013 ns | 0.0012 ns | | |
// | Delegate | 1.1366 ns | 0.0099 ns | 0.0088 ns | | |
// | FastDelegate | 1.6239 ns | 0.0103 ns | 0.0097 ns | | |
// MyClassLib.cs is compiled in another project (havent tested if compiling with Fody is working with BenchmarkDotnet in the same project) | |
// This file is referencing BenchDelegates.MyClassLib | |
using System; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Gist that shows the difference of an interface call | |
// Two cases in this benchmark: | |
// - Dictionary that should not inline | |
// - List that should inline | |
// We are also using the enumerator to show the impact on allocation as well. | |
/* | |
Method | Mean | Error | StdDev | Gen 0/1k Op | Gen 1/1k Op | Gen 2/1k Op | Allocated Memory/Op | | |
------------------- |----------:|----------:|----------:|------------:|------------:|------------:|--------------------:| | |
ProcessDictionary | 27.109 ns | 0.1258 ns | 0.1176 ns | - | - | - | - | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static class AssemblyHelper | |
{ | |
/// <summary> | |
/// Gets the list of concrete generic type instances used in an assembly. | |
/// See remarks | |
/// </summary> | |
/// <param name="assembly">The assembly</param> | |
/// <returns>The list of generic type instances</returns> | |
/// <remarks> | |
/// Note that this method is fetching only direct type instances (through type, method argument or fields) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// BenchmarkDotNet=v0.10.12, OS=Windows 10 Redstone 3 [1709, Fall Creators Update] (10.0.16299.248) | |
// Intel Core i7-4980HQ CPU 2.80GHz (Haswell), 1 CPU, 8 logical cores and 4 physical cores | |
// Frequency=2728070 Hz, Resolution=366.5595 ns, Timer=TSC | |
// [Host] : .NET Framework 4.6.1 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.2633.0 | |
// DefaultJob : .NET Framework 4.6.1 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.2633.0 | |
// | |
// | |
// Method | Mean | Error | StdDev | | |
// ------------- |----------:|----------:|----------:| | |
// VirtualCall | 0.9152 ns | 0.0393 ns | 0.0368 ns | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function Sleef_sinf_u10: | |
subq $184, %rsp | |
movaps %xmm15, 160(%rsp) | |
movaps %xmm14, 144(%rsp) | |
movaps %xmm13, 128(%rsp) | |
movaps %xmm12, 112(%rsp) | |
movaps %xmm11, 96(%rsp) | |
movaps %xmm10, 80(%rsp) | |
movaps %xmm9, 64(%rsp) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// hack for https://twitter.com/ashmind/status/871357443036467201 | |
// Write to the stack through FieldOffset and Virtual methods (no unsafe, not using System.Runtime.InteropServices directly into a method) | |
// valid only for x86-32bits (need to change int Address to long in order to have it working for x64) | |
// The basic idea is to use FieldOffset on a struct to reinterpret an object reference | |
// and using this trick to take an address on the stack that doesn't involve manipulating directly IntPtr or unsafe code... | |
using System.Runtime.InteropServices; | |
class Program |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// proof of concept for breaking https://unbreakable-test.azurewebsites.net/ | |
using System; | |
using System.Runtime.CompilerServices; | |
using System.Runtime.InteropServices; | |
static class Program { | |
[MethodImpl(MethodImplOptions.NoInlining)] | |
public static void MethodToPatch() | |
{ | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// From https://github.com/dotnet/coreclr/tree/edc1320180a3d68a16855da8da82f01871bf3a1d/src/mscorlib | |
// 109 Files (over a total of 974 cs files) in System.Private.CoreLib.dll (ex mscorlib.dll) | |
// are making an internal fcall/qcall to a function inside coreclr.dll | |
// In total 967 internal fcall/qcall functions are imported | |
Internal\Runtime\Augments\RuntimeThread.cs | |
Microsoft\Win32\OAVariantLib.cs | |
System\AppDomain.cs | |
System\ArgIterator.cs | |
System\Array.cs |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// .NET Code generated for the F# type: | |
// type Shape = | |
// | Rectangle of width : float * length : float | |
// | Circle of radius : float | |
// | Triangle of width : float * height : float | |
using Microsoft.FSharp.Core; | |
using System; | |
using System.Collections; | |
using System.Diagnostics; |