如何在批量插入时停止 System.OutOfMemoryException

发布于 2024-09-11 15:46:59 字数 404 浏览 6 评论 0原文

您好,我正在将大约 100000 条记录放入内存中,清理数据并插入到新表中。插入大约 2000 条记录后,出现以下异常。

类型的第一次机会异常 发生“System.OutOfMemoryException” 在 Iesi.Collections.DLL 中 第一次机会 类型异常 'FluentNHibernate.Cfg.FluentConfigurationException' 发生在 FluentNHibernate.DLL

我正在使用 Fluent NHibernate。但不确定问题是否与流畅的 NHibernate 本身有关。

对数据库进行批量插入的最佳方法是什么,我想知道是否使用 stringbuilder 并构建 sql 查询。 非常感谢任何指点。

Hi I am bringing about 100000 records into memory cleaning the data and inserting into a new table. After inserting around 2000 records I get the following exception.

A first chance exception of type
'System.OutOfMemoryException' occurred
in Iesi.Collections.DLL A first chance
exception of type
'FluentNHibernate.Cfg.FluentConfigurationException'
occurred in FluentNHibernate.DLL

I am using Fluent NHibernate. but am not sure if the problem is related to fluent NHibernate itself.

What is the best way to do bulk inserts to the db, I am wondering whether to use stringbuilder and build an sql query instead.
Any pointers much appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

素食主义者 2024-09-18 15:47:00

虽然我确信您可以采用多种技术通过 hibernate 执行此类操作,但您最好将数据清理操作构建为 SQL 语句并在数据库本身上运行。如果您需要定期运行它,您可以考虑使用存储过程。

Whilst I'm sure that there are many techniques that you can employ to do this kind of operation through hibernate, it seems likely that you would be better off constructing your data-cleansing operation as an SQL statement and running it on the database itself. If you need to run it regularly, you might consider a stored procedure.

萌梦深 2024-09-18 15:47:00

尝试使用无状态会话:

object[] objectsToInsert = GetObjectsToInsert();

using (var statelessSession = sessionFactory.OpenStatelessSession())
using (var transaction = statelessSession.BeginTransaction())
{
    foreach (var objectToInsert in objectsToInsert)
    {
        statelessSession.Insert(objectToInsert);
    }
    transaction.Commit();
}

Try using a stateless session:

object[] objectsToInsert = GetObjectsToInsert();

using (var statelessSession = sessionFactory.OpenStatelessSession())
using (var transaction = statelessSession.BeginTransaction())
{
    foreach (var objectToInsert in objectsToInsert)
    {
        statelessSession.Insert(objectToInsert);
    }
    transaction.Commit();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文