2011年1月7日

常见的Lambda表达式引起的闭包问题

摘要: 以下代码的原意是想找出list中满足Name字段包含t, Remark字段包含mark的数据代码不过实际情况是data中间一条记录都没有而hardcode算出来的data2中有3条记录原因如下:  这个lambda表达式 Where(p=p.Name.Contains(val)) , 实际上只是保留了一个指向函数外部的val的引用 , 他这个时候并没有把val的真实的值拷贝进来  真正去读取val值的时候是 lambda.ToList() 这个时候才真正执行lambda表达式取数据,过滤数据 ,也是这个时候才去读取val的值  而在foreach的第二次操作的时候 val的值被覆盖mark了 阅读全文

posted @ 2011-01-07 14:42 听说读写 阅读(1873) 评论(0) 推荐(0) 编辑

Lambda动态附加条件和排序语句 (可用于linq to sql)

摘要: 一种常见的情况, 使用linq-to-sql 或者lambda(Entity framework)去数据库取条件的时候需要附加多个条件或者排序语句以 Name="John" Age=23 为例先明确一个概念 对于Lambda来说 以下两个表达式是等价的  1. list.Where(p=p.Name=="John" && p.Age==23)   2. list.Where(p=p.Name=="John" ).Where(p=p.Age==23)lambda表达式只是创建了一个方法的定义 实际上并没有执行真正的执行一般等到ToList()方法(内部其实是IEnumerableT)被 阅读全文

posted @ 2011-01-07 14:00 听说读写 阅读(8344) 评论(3) 推荐(1) 编辑

CLR via C# 读书笔记 6-4 监控AppDomain资源使用

摘要: 可以通过将AppDomain.MonitoringIsEnabled 设置为true开启监控域的资源之后可以通过访问以下属性获取域的资源消耗  1. MonitoringSurvivedMemorySize 2. MonitoringSurvivedProcessMemorySize 3. MonitoringTotalAllocatedMemorySize 4. MonitoringTotalProcessorTime不过这里有些非常恶心的地方  1. 开启监控是全局的..你不能只能只监控某个域  2. 开了就关不掉了....如果在将MonitoringIsEnabled 设置为ture以后 阅读全文

posted @ 2011-01-07 11:41 听说读写 阅读(1125) 评论(0) 推荐(0) 编辑

导航