c# - Context.SubmitChanges 与 TransactionScope.Submit 内存消耗

标签 c# dbcontext transactionscope

关于这两种方法,我想知道的是它们如何处理内存,以及哪种方法更适合我的情况。

现在我需要重新生成表(每个表大约 1.5 GB),我的第一个解决方案是使用来自源的新数据(在我的场景中是一个网络服务),所以我打开新的数据库上下文,删除旧表(in the context) ,我将新数据放入上下文,将更改提交到上下文(因此只有在没有错误的情况下更改才会生效)。

我所看到的是,以这种方式进行内存消耗成为一个问题,似乎数据一直保留在内存中,直到我提交更改(使用创建的上下文)。

所以我的想法是使用 block (并且每个 block 都使用上述相同的逻辑对少量数据进行操作),但是如果使用的任何 block 的操作失败,我需要回滚,所以我假设我需要一个 TransactionScope。我现在想知道的是,TransactionScope 是否在内存中工作直到像上下文一样提交,或者是否使用一些日志记录技术以便它可以回滚每一步(但每一步都不会保留在内存中)。

最佳答案

数据保留在内存中,因为实体附加到它们的上下文。 L2S 不支持分离实体,因此这不是可行的策略。

更好的解决方案:考虑打开一个数据库连接、一个 TransactionScope 并每批创建一个 L2S 上下文。您可以为上下文构造函数提供一个现有连接。这样内存使用量是恒定的,您可以使用事务。

关于c# - Context.SubmitChanges 与 TransactionScope.Submit 内存消耗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31434540/

相关文章:

sql-server - 跨 Azure SQL 和本地 sql 服务器的分布式事务导致错误

c# - 有关如何记录同步过程的示例

c# - 如何从 Windows Phone 7 应用程序发送电子邮件

mysql - 使用多个dbcontexts并且找不到原始数据库

visual-studio - 如何创建没有 "No migrations configuration type was found in the assembly"问题的迁移?

c# - SQLTransaction 已完成错误

c# - 在 ASP.NET MVC 2 项目中同时使用 Razor 和 Spark

c# - 在主线程上执行异步任务的最佳方式

带有内存数据库的 C#/OSX

nunit - 这安全吗? - NUnit 基类打开并回滚 TransactionScope