Context.SubmitChanges 对比 TransactionScope.Submit 内存消耗
Context.SubmitChanges vs TransactionScope.Submit memory consumption
关于这两种方法,我想知道的是它们如何处理内存以及哪种方法更适合我的情况。
现在我需要重新生成 tables(每个 table 大约 1.5 GB),我的第一个解决方案是使用来自源的新数据(在我的场景中是一个网络服务),所以我打开新的 db 上下文,删除旧的 tables(在上下文中),我将新数据放在上下文中,将更改提交到上下文(因此只有在没有错误的情况下更改才会生效)。
我所看到的是,以这种方式进行内存消耗成为一个问题,似乎数据一直保留在内存中,直到我提交更改(使用创建的上下文)。
所以我的想法是使用块(并且每个块都使用上述相同的逻辑对少量数据进行操作),但是如果使用的任何块操作失败,我需要回滚,所以我假设我需要一个 TransactionScope .我现在想知道的是 TransactionScope 是否在内存中工作直到像上下文一样提交,或者是否使用一些日志记录技术以便它可以回滚每一步(但每一步都不会保留在内存中)。
数据保留在内存中,因为实体附加到它们的上下文。 L2S 不支持分离实体,因此这不是可行的策略。
更好的解决方案:考虑打开一个数据库连接、一个 TransactionScope 并创建一个 L2S 上下文每批次。您可以为上下文构造函数提供一个现有连接。这样内存使用量是恒定的,您可以使用事务。
关于这两种方法,我想知道的是它们如何处理内存以及哪种方法更适合我的情况。
现在我需要重新生成 tables(每个 table 大约 1.5 GB),我的第一个解决方案是使用来自源的新数据(在我的场景中是一个网络服务),所以我打开新的 db 上下文,删除旧的 tables(在上下文中),我将新数据放在上下文中,将更改提交到上下文(因此只有在没有错误的情况下更改才会生效)。
我所看到的是,以这种方式进行内存消耗成为一个问题,似乎数据一直保留在内存中,直到我提交更改(使用创建的上下文)。
所以我的想法是使用块(并且每个块都使用上述相同的逻辑对少量数据进行操作),但是如果使用的任何块操作失败,我需要回滚,所以我假设我需要一个 TransactionScope .我现在想知道的是 TransactionScope 是否在内存中工作直到像上下文一样提交,或者是否使用一些日志记录技术以便它可以回滚每一步(但每一步都不会保留在内存中)。
数据保留在内存中,因为实体附加到它们的上下文。 L2S 不支持分离实体,因此这不是可行的策略。
更好的解决方案:考虑打开一个数据库连接、一个 TransactionScope 并创建一个 L2S 上下文每批次。您可以为上下文构造函数提供一个现有连接。这样内存使用量是恒定的,您可以使用事务。