Asp.net 实体框架和存储过程哪个更快?

Asp.net 实体框架和存储过程哪个更快?,asp.net,.net,sql-server,stored-procedures,entity-framework-4,Asp.net,.net,Sql Server,Stored Procedures,Entity Framework 4,当涉及到在数组对象中插入大量数据时,比如说100000行, 你认为哪一个会更快 通过实体框架?插入100.000行时调用SaveChanges 使用INSERT存储过程每行循环100.000次? 如果你也能提供一个参考,那将是非常棒的 谢谢,循环10万次调用存储过程至少会产生10万次跨进程和/或跨网络调用,速度会很慢 如果您使用的是SQL server,另一种选择是使用TVPs,以避免在C代码的循环中调用insert。它允许您在一次调用中将数据表传递给存储过程 从上面的链接中,他们推荐一次100

当涉及到在数组对象中插入大量数据时,比如说100000行, 你认为哪一个会更快

通过实体框架?插入100.000行时调用SaveChanges 使用INSERT存储过程每行循环100.000次? 如果你也能提供一个参考,那将是非常棒的


谢谢,循环10万次调用存储过程至少会产生10万次跨进程和/或跨网络调用,速度会很慢

如果您使用的是SQL server,另一种选择是使用TVPs,以避免在C代码的循环中调用insert。它允许您在一次调用中将数据表传递给存储过程

从上面的链接中,他们推荐一次1000行,但始终为您的应用程序进行测量和实验:

使用表值参数与使用其他参数的方法相当 基于集合的变量;但是,经常使用表值参数 对于大型数据集,速度更快。与批量操作相比 比表值参数、表值 参数在插入少于1000行时表现良好

因此,可以尝试循环100次,每次通过1000行,而不是跨越边界100K次


您可能还想重新评估为什么asp.net在您的应用程序中一次有10万个项目。是否会立即传递到服务器并保存在内存中,并且可能存在内存问题?这能被打破吗?您是否在asp.net读取和处理10万行数据的情况下进行数据处理,而sql server代理作业可能更合适?如果您提供更多有关应用程序数据流及其功能的详细信息,人们可能会提供更多选项。

循环调用存储过程10万次,至少会创建10万次跨进程和/或跨网络调用,速度会很慢

如果您使用的是SQL server,另一种选择是使用TVPs,以避免在C代码的循环中调用insert。它允许您在一次调用中将数据表传递给存储过程

从上面的链接中,他们推荐一次1000行,但始终为您的应用程序进行测量和实验:

使用表值参数与使用其他参数的方法相当 基于集合的变量;但是,经常使用表值参数 对于大型数据集,速度更快。与批量操作相比 比表值参数、表值 参数在插入少于1000行时表现良好

因此,可以尝试循环100次,每次通过1000行,而不是跨越边界100K次


您可能还想重新评估为什么asp.net在您的应用程序中一次有10万个项目。是否会立即传递到服务器并保存在内存中,并且可能存在内存问题?这能被打破吗?您是否在asp.net读取和处理10万行数据的情况下进行数据处理,而sql server代理作业可能更合适?如果您提供更多有关应用程序数据流及其功能的详细信息,人们可能会提供更多选项。

存储过程会更快。实体框架没有批处理功能,因此,除了10万次访问数据库之外,还要承受EF的性能开销。对于这类东西,原始ado将比ORM更快


这里是一些比较的链接,它在比较中没有原始ado.net,但dapper是最接近这个速度的。存储过程会更快。实体框架没有批处理功能,因此,除了10万次访问数据库之外,还要承受EF的性能开销。对于这类东西,原始ado将比ORM更快


这里是一些比较的链接,它在比较中没有原始ado.net,但dapper是最接近这个速度的。实际上最快的方法是使用SqlBulkCopy对象,它正是为这种情况设计的

实际上最快的方法是使用SqlBulkCopy对象,它正是为这种情况而设计的

您可以将数据传递给存储过程XML参数。那么它是如何通过存储过程使用TVPs进行测量的呢?我希望它比上面列出的1或2快约100倍见答案您可以将数据传递到存储过程XML参数。那么它是如何通过存储过程用TVPs测量的呢?我希望它比上面列出的1或2快约100倍见答案。。我大约在一分钟前进行了测试,这里是10万行插入的结果:EF为21467毫秒,SP为41133毫秒,在已经打开的连接上继续,而不是在交易过程中重新打开或关闭。无论怎样,循环中的100K都会变慢。TVPs将使您最昂贵的成本降低10万倍。我想这可能取决于您在存储过程中所做的工作,您是否测试过将简单的插入作为
基准根据我自己的经验,原始sql的速度总是明显更快。您使用的是什么版本的EF?Bryanmac是正确的,不管怎样,100k连接都会很慢。我已经试过EF,我会公布我的计算结果。但从来没有机会尝试你的方式。今天我将这样做,然后我将在这里分享结果作为答案。非常感谢你,费特莫。。我大约在一分钟前进行了测试,这里是10万行插入的结果:EF为21467毫秒,SP为41133毫秒,在已经打开的连接上继续,而不是在交易过程中重新打开或关闭。无论怎样,循环中的100K都会变慢。TVPs将使您最昂贵的成本降低10万倍。我想这可能取决于您在存储过程中所做的工作,您是否测试过使用简单的插入作为基准?根据我自己的经验,原始sql的速度总是明显更快。您使用的是什么版本的EF?Bryanmac是正确的,不管怎样,100k连接都会很慢。我已经试过EF,我会公布我的计算结果。但从来没有机会尝试你的方式。今天我将这样做,然后我将在这里分享结果作为答案。非常感谢FettMo。此方法大约每5小时运行一次。这就是为什么我估计大约有10万个项目。那么,当100个循环发送1000行的TVP时,它是如何测量的呢?我猜比您的两个选项快约100倍。1循环SP 100k次:40秒2使用EF插入100k项:19秒3表值插入100k项:1秒。。谢谢你,布莱恩!这太棒了。酷-确保批中的项目不是无界的。我会分成1000个左右,然后循环。它可能没有那么快,但它可以防止在5小时内运行AT或SQL时内存不足,因为它会在表中传递该集合。祝你好运。这个方法大约每5个小时运行一次。这就是为什么我估计大约有10万个项目。那么,当100个循环发送1000行的TVP时,它是如何测量的呢?我猜比您的两个选项快约100倍。1循环SP 100k次:40秒2使用EF插入100k项:19秒3表值插入100k项:1秒。。谢谢你,布莱恩!这太棒了。酷-确保批中的项目不是无界的。我会分成1000个左右,然后循环。它可能没有那么快,但它可以防止在5小时内运行AT或SQL时内存不足,因为它会在表中传递该集合。祝你好运