假设与SQL Server和一个DBML一个典型的域实体接近/ L2S DAL与最重要的是一个逻辑层:并行化L2S实体检索
在的情况下的延迟加载是不是一种选择,我已经在结算约定,其中获取实体列表并不会获得每个项目的子实体(不加载),但是获取单个实体(急切加载)。
由于获得单个实体也会得到孩子,它会导致一个级联效应,其中每个孩子也会得到它的孩子。这听起来很糟糕,但只要模型不太深,我通常不会看到超过易用性好处的性能问题。
因此,如果我想要得到一个列表,其中每个项目都与儿童充分水合,我结合了GetList和GetItem方法。所以我会得到一个列表,然后循环通过它获取每个项目的完整级联。即使这在我所从事的许多项目中都可以接受 - 但我最近遇到了需要更高效的更大型号和/或更多数据的情况。
我发现分割循环并在多个线程上执行它会产生出色的结果。在我的第一个实验中,从一个特定项目中选出50个项目,我做了10个项目的5个线程,每个项目的时间都提高了3倍。
当然,里程会因项目而异,但其他条件相同时,这显然是一个很大的机会。但是,在我进一步讨论之前,我想知道其他人已经完成了哪些工作已经完成了。并行化这种类型的东西有什么好方法?
杰夫,感谢您的回复。不知道我们在同一页上。我正在做一个单一的数据库调用,返回一组记录。这个问题与每条记录的细节和每条记录的细节等有关。它就像一个金字塔。 – 2010-04-24 16:36:51
实际上,我能得到的唯一列表是最上面的一个 - 其余的必须是一个,除非我放弃在数据库中进行连接,在这种连接中许多表(又名实体)被合并为一个非规范化结果。但是,如果我在DAL中这样做了,它会打破每个实体的孤立映射,并绕过它们的逻辑层,从而打开一堆完全不同的蠕虫。这个问题似乎是数据驱动与域驱动方法的基本紧张\权衡。 – 2010-04-24 16:37:27