Skip to content

Instantly share code, notes, and snippets.

@CleanCoder
CleanCoder / ObjectPool
Created July 20, 2018 02:31
Object Pool
public class ObjectPoolAsync<T> : IDisposable
{
private readonly BufferBlock<T> buffer;
private readonly Func<T> factory;
private readonly int msecTimeout;
public ObjectPoolAsync (int initialCount, Func<T> factory, CancellationToken cts, int msecTimeout = 0)
{
this.msecTimeout = msecTimeout;
buffer = new BufferBlock<T> ( new DataflowBlockOptions { CancellationToken = cts });
@CleanCoder
CleanCoder / MySQL
Last active July 27, 2018 07:24
MySQL
# 索引
1)索引必须按照“idx_字段名称_字段名称[_字段名]”进行命名。
2)唯一索引必须按照“uniq_字段名称_字段名称[_字段名]”进行命名。
3)名称必须使用小写。
4)中的字段数建议不超过5个,索引毕竟也占空间,请谨慎使用
5)主键是最左边一列是id,id不做业务使用,建表的时候必须有索引,不建议创建这个结构的表
# Create Table If Not Exists
CREATE TABLE IF NOT EXISTS `shares` (
`id` int(64) NOT NULL auto_increment,
@CleanCoder
CleanCoder / Production Issue
Last active September 7, 2018 08:02
线上排查
#自动抓取Dump, 当异常信息包含特定字符串
1. procdump.exe -ma -e 1 -f <Exception Content> <PID>
.i.e. procdump.exe -ma -e 1 -f "Commands ouy of sync" 3368
-ma Write a dump file with all process memory. The default dump format only includes thread and handle information.
-e Write a dump when the process encounters an unhandled exception. Include the 1 to create dump on first chance exceptions.
-f Filter the first chance exceptions. Wildcards (*) are supported. To just display the names without dumping, use a blank ("") filter.
C:\>procdump -e 1 -f "" w3wp.exe
Display without writing a dump, the exception codes/names of w3wp.exe
@CleanCoder
CleanCoder / MISC
Created August 24, 2018 02:55
MISC
// Rethrow exception with original callstack
ExceptionDispatchInfo.Capture(ret.Exception).Throw()
1. A General Fast Method Invoker (https://www.codeproject.com/Articles/14593/A-General-Fast-Method-Invoker)
public static FastInvokeHandler GetMethodInvoker(MethodInfo methodInfo)
{
DynamicMethod dynamicMethod = new DynamicMethod(string.Empty,
typeof(object), new Type[] { typeof(object),
typeof(object[]) },
methodInfo.DeclaringType.Module);
ILGenerator il = dynamicMethod.GetILGenerator();
ParameterInfo[] ps = methodInfo.GetParameters();
Type[] paramTypes = new Type[ps.Length];