0

我需要插入数百万条记录。现在我处于一个非常紧凑的循环中,对于每条记录,我

a) start a transaction  (JetBeginTransaction)
b) prepare an update (JetPrepareUpdate)
c) add the row (JetSetColumns)
d) update (JetUpdate)
e) commit the transaction (JetCommitTransaction)

但是,当通过执行 JetUpdate插入记录时,占用的内存越来越多。即使我停止执行插入记录或插入所有记录,内存也不会被释放。

我怎么能限制记忆上升?

为什么JetCommitTransaction 不释放内存?

如何及时释放内存?

4

1 回答 1

0

数据库缓存可能正在增长。使用性能计数器确认:Database -> Database Cache Size (MB)

您可以使用JET_paramCacheSizeMax(请参阅https://docs.microsoft.com/en-us/windows/desktop/extensible-storage-engine/database-cache-parameters)限制大小。

我也同意 egray 的评论,即您应该在每个事务中插入多个插入。或者至少使用 Lazy Commit(一个标志JetCommmitTransaction)。否则,您将过于频繁地写入事务日志文件,性能将受到极大影响。

于 2019-04-02T17:21:24.920 回答