随笔分类 - 点滴
.net中的一些有趣的类和有趣的行为,以及点点滴滴的技巧
定制json序列化
摘要:最近有人问我怎么定制一个json序列化,使序列化的时候只写出声明的父类成员,而不要把实际子类的成员写出来。当然,序列化用的是大家用的最多的json.net。 简单的说,这是个契约怎么解析的问题,json.net选择使用实际类型自然是有多方面的考量,毕竟申明类型可以是抽象类或接口等。废话不说了,直接上
阅读全文
一个简单的Linq to TreeNode
摘要:最近两天写单元测试,碰到需要验证一个树是否是期望的,但是树这个结构要验证起来还真是有点烦。。。 我的树大概是这样的: 1 class TreeNode 2 { 3 private static readonly TreeNode[] Empty = new TreeNode[0...
阅读全文
4.5你太黑了,不带这么玩TypeForwardedTo的
摘要:话说最近好不容易把framework 4.0的metadata信息都能全部抽出了,结果换4.5挂了。。。framework那帮人在4.5里面用了些什么诡异的玩意?结果一看4.5的部分field用了typed function pointer这个诡异的类型,好吧,还好之前留好空挡了,就等有空的时候去填空,现在就乖乖的补上实现,最多麻烦点,field signature里面放个类型,类型里面可以选typed function pointer,typed function pointer里面有个method signature,method signature里面继续有类型,当然类型里面要是他们高兴
阅读全文
一个非常简单的反射加速方案
摘要:不废话,直接上代码: class Program { private static readonly MethodInfo HelpMethod = typeof(Program).GetMethod("GetHelp", BindingFlags.NonPublic | BindingFlags.Static); static void Main(string[] args) { // you can cache the delegate, the type of delegate is always Func ...
阅读全文
又发现一个msdn的坑
摘要:一个类型里面有两个属性仅仅是大小写区别,可是IIS不区分大小写,问:如何才能查看两个属性里面的文档那?http://msdn.microsoft.com/en-us/library/microsoft.jscript.globalobject.boolean%28v=vs.110%29.aspx
阅读全文
又发现个.net framework的坑
摘要:请找出这两个方法的区别:http://msdn.microsoft.com/en-us/library/ms584187(v=vs.110).aspx
阅读全文
sql server死锁神器
摘要:参考文章:http://blogs.msdn.com/b/sqlserverfaq/archive/2013/04/27/an-in-depth-look-at-sql-server-memory-part-2.aspx简单的说:1.死锁发生前,打开开关:DBCC Traceon (1204,-1)DBCC Traceon (1222,-1)2.等待死锁发生3.查询死锁信息:Use MasterSELECT xed.value('@timestamp', 'datetime') as Creation_Date, xed.query('.') A
阅读全文
踩到一个Emit的坑,留个纪念
摘要:重现代码:var dmFoo = new DynamicMethod("Foo", typeof(void), Type.EmptyTypes);var ilFoo = dmFoo.GetILGenerator();//...var label = ilFoo.DefineLabel();//...var dmBar = new DynamicMethod("Bar", typeof(void), Type.EmptyTypes);var ilBar = dmBar.GetILGenerator();//...ilBar.MarkLabel(label)
阅读全文
关于Task的线程窃取
摘要:示例代码: 1 static void Main(string[] args) 2 { 3 ThreadPool.SetMaxThreads(4, 1000); 4 object locker = new object(); 5 const int TaskCount = 10; 6 7 Task main = Task.Run(() => 8 { 9 var mainTid = Thread.CurrentT...
阅读全文
tsql的奇特语法
摘要:也许是离开t-sql太久了,突然发现很多t-sql的奇特语法用一句sql解决多种排序:declare @flag int=0;SELECT C1, C2FROM T ORDER BY CASE WHEN @flag = 1 THEN C1 END ASC, CASE WHEN @flag = 0 THEN C1 END DESC插入N行数据(省得每行数据写一遍insert ... values了):insert into t (C1, C2)values(1,1),(2,2),...(N-1,N-1),(N,N)
阅读全文
Dandelion - Distributed Computing on GPU Clusters
摘要:linq on GPUs 非常期待中看起来很cool,期望早点面世
阅读全文
用dynamic expression运行时访问dynamic object
摘要:实验了好久才弄出来,msdn上怎么就不给下示例。。。 var eo = new System.Dynamic.ExpandoObject(); dynamic o = eo; o.hello = "world"; var oDynamic = Expression.Lambda<Func<string>>( Expression.MakeDynamic( typeof(Func<System.Runtime.CompilerServices...
阅读全文
微软Roslyn编译器CTP版发布
摘要:Compiler-as-a-Service终于有眉目了下载地址: http://msdn.microsoft.com/en-us/roslyn
阅读全文
添加模式匹配
摘要:自定义语言的一个好处就是可以随时添加自己喜欢的语法,今天就给自己的语法加了个类似模式匹配的语法。语法本身采用了相对比较容易阅读的方式来组织,例如:(*([$a,$b,$c][1,1,'Y':'yes!'][1,1,'N':'no!'][2,?,?:'somethingwrong!'][?,?,?:'op...'])*)第一行,代表开始这一串语法第二行,分别取a,b,c三个变量的值第三行,如果三个变量的值为1,1,'Y',则返回'yes'第四行,语义同上第五行,如果第一
阅读全文
为wcf写个CircularStream
摘要:wcf提供了streaming方式后,一直有个小问题,找不到合适的stream载体,如果能用上文件流什么的做返回值那是最好不过了,但是更多的情况下,需要返回一个流,但是这个流并没有类似文件之类的真实载体,而且有时候这个流还比较大(如果很小的话,也不需要用到streaming方式了),这时候似乎就有那么点麻烦了。 首先,我不喜欢用MemoryStream,因为它真实的占用了这么多内存,遇到大数据量的情况下,wcf的streaming方式的威力将大大降低。当然,也可以借助文件,返回文件流来绕开这个问题,或者使用其他的什么现成的流。 然而,我更倾向于使用类似Circular Buffer的逻辑来处.
阅读全文
对帐脚本语言的修改
摘要:今天修改了对帐脚本语言的定义,简化了只有一个参数的lambda表达式原lambda表达式为:无参数:()->1单参数:(x)->$x+1多参数:(x,y)0>$x+$y新的lambda表达式支持原先形式的基础上增加了:单参数:x->$x+1
阅读全文
对帐引擎2个月后的监控数据
摘要:对帐引擎已经跑了近2个月,虽然期间瞎改定义跑出了几个out of memory和其他几个违反语法的异常,也abort掉了几个对帐任务,但各项指标看起来还行,总体维持在这个水平,基本没怎么上升,除了定义的缓存和定义解析结果的缓存有点太占内存了以外,基本没啥大问题 分类 计数名 值 .NET CLR Exceptions # of Exceps Thrown / sec 0 .NET CLR Jit # of IL Bytes Jitted 38565044 # of Methods Jitted 38...
阅读全文
WPF中如何在文本外面加虚线外框
摘要:昨天突然被问到如何在wpf里面给一段文本加个虚线外框,由于有一段时间没玩wpf了,一时还真没想出来,虽然大概有个思路,但是也不保证正确。今天回到家,闲着没事情也就随便试验了一下。 首先来个框: <Grid><Border HorizontalAlignment="Center" VerticalAlignment="Center"Width="60" Height="30" CornerRadius="5"BorderBrush="Blue" BorderT
阅读全文
对账算法改进
摘要:因为业务量的增长,导致对账时两边的数据占用了1.5g内存,考虑到业务的增长量,打算对原来的一整天数据全部读入后在执行对账的方式做些修改,修改为类似流的join方式,具体方式见图:如果A的输出流与B的输出流的顺序是基本一致的,那么就可以获得一个比较好的hash join效果,而对少数N代(连续N次未能匹配)未匹配数据做一些补偿,就可以完成全部匹配工作了但是,在A的输出流和B的输出流的顺序差异很大,可能造成绝大部分数据未能匹配,那么,在有补偿的情况下,整个方式就退化成根据A left join B,再根据B left join A
阅读全文
如何退出正在Sleep的线程
摘要:今天有个同事问我Thread的Interrupe方法,这个方法用于终止另一个正在等待(Sleep/Wait/Join)状态的线程,如果那个线程未处于等待状态,则等到下次进入等待状态时再抛出。 这个方法的平时用的机会其实并不大,由于需要线程处于等待状态,很大程度上限制了使用的机会,因此问了下同事实际的使用场景,原来是某些线程进入了长时间的Sleep状态,而在某些情况下,可能某个任务发现可以取消其他一系列的任务时,需要尽快退出这些任务。这个时候使用Interrupe方法固然可以实现,不过显然也不太优雅,而且也更容易在未期待的地方抛异常,使程序进入不可控制的状态。 那么更优雅,更可控制的方法...
阅读全文