如何快速将数据库中的数据导入对象列表(使用entity framework)

我在entity framework对象上使用linq语句将数据从数据库中获取到对象列表中。 我的问题是表现不错,表现得很好。 对于我处理的几百或几千行,它需要几秒钟。

我将在下面进一步介绍一个代码示例,但首先我要解释为什么我将数据放入对象列表中,之后我会回答我的问题:

我将数据放入对象列表中以轻松访问数据,并填充网格视图,填充combobox,并能够使用其他方法进行对象内部的计算和数据收集。

因为我很确定这个用例并不是那么少而且我得到的性能真的是abmyssal我认为我要错误地使用EF,错误地执行linq语句或者我的设计思想的一部分是完全错误的。 所以我的问题是我可以做些什么来提高性能(或者我是否需要将我的设计理念完全抛到窗外并完全不同……如果是这样的话)?

代码示例:

对象存储在数据层中的对象类中,数据层内部也有数据收集方法(如果这里有错误,请告诉我,因为我正在从内存中输入此内容):

public class myobject { public id; public name; public static List GetData() { using (myentities entity = new myentities()) { List resultList = (from e in entity.mytable select new myobject{ id=e.id, name=e.name}).ToList(); } } } 

当我调用myobject.GetData()几次例如填充3个combobox时,问题是对于几十个条目,每个条目几乎需要半秒钟。 如果我有几千个条目超过1秒。 尝试了一下后,我发现即使是使用(因此创建新的连接)并没有真正产生影响,性能真正源于我如何使用/获取对象列表(linq应该生成的sql和我一样快通常期望我在sql server maanagement studio中这样做。

更新我做了一些测试,也有点奇怪:当我使用String而不是一个对象时,它仍然很慢并且ToList本身需要太长时间。 例如,如果我取回68个条目则需要1.7秒。 其中0.5是ToList方法(这种现象很明显,因为数据仅在调用tolist时准备和收集,但是1.7秒之前只有几k的数据行太长)。

 public static void GetNameData() { using (myentities entity = new myentities()) { (from e in entity.mytable select e.name).Distinct().ToList(); } } 

您提供的代码,数据量为“几打”和“1千”,应该是闪电般快速的。 当然,除非您返回百万列的查询,或者除非您对ORM设置做了一些非常奇怪的事情。

首先,检查数据库服务器。 它可能运行在低优先级,它可能有完全搞砸的索引,它可能有慢的网络连接,或(…)。

顺便说一句。 你总是拿整个表,或者你刚刚删除了代码示例中的filter? 如果在没有filter的情况下工作得更快,请检查db indices。 否则,请检查网络。

另外,尝试在本地设置数据库。 如果它太大,修剪它,它只是测试。 然后重试并检查需要多长时间。 它应该很快。 如果不是 – 那么你可以真正开始假设你的应用程序中的EF配置,缓存,数据处理中断了。