Tag: lazy evaluation

如何懒惰评估wpf:DataGrid,仅在需要时检索数据

我有一个WPF数据网格,绑定到一个由数据库中的linq-to-sql填充的列表。 绑定是双向的,允许用户更改每行中的值 当显示大约20000行时,程序在列表初始化期间因内存不足exception而崩溃。 即使行数较少,性能也会变得难以忍受。 我知道在初始化时,datagrid遍历每一行来测量最大列宽和其他属性。 对于所有行,它显然会这样做,无论它们是否在屏幕上。 我尝试将datagrid绑定到myQuery.ToList() (以允许通过单击列对数据网格进行排序)或直接绑定到IQueryable。 (排序不适用于此) 两者都产生相同的结果。 仅具有20000个项目的ToList()不会导致大量内存消耗,只有当它绑定到数据网格时才会发生这种情况。 忽略数据网格中20000行有用的问题(这些是当前的要求;更改那些工作示例会有所帮助)。 什么是懒惰加载当前显示在屏幕上的数据的最简单方法,并忽略其他所有内容,直到它滚动到视图中? 这可以在没有第三方库和主要代码更改的情况下完成吗? 如果没有,推荐的解决方法是什么?

有人可以解释这个懒惰的评估代码吗?

所以,这个问题刚刚被问到: 如何处理“无限”IEnumerable? 我的示例代码: public static void Main(string[] args) { foreach (var item in Numbers().Take(10)) Console.WriteLine(item); Console.ReadKey(); } public static IEnumerable Numbers() { int x = 0; while (true) yield return x++; } 有人可以解释为什么这是懒惰的评估? 我在Reflector中查找了这段代码,而且比起初时我更困惑。 reflection器输出: public static IEnumerable Numbers() { return new d__0(-2); } 对于numbers方法,看起来为该表达式生成了一个新类型: [DebuggerHidden] public d__0(int 1__state) { this.1__state = 1__state; this.l__initialThreadId = […]

在初始化惰性实例时,将参数传递给构造函数

public class myClass { public myClass(String InstanceName) { Name = InstanceName; } public String Name { get; set; } } // Now using myClass lazily I have: Lazy myLazy; Console.WriteLine(myLazy.Value.Name); 我的问题是当我们使用惰性实例时如何将InstanceName传递给myClass构造函数?