1

使用数据库中的存储过程获取大约 200MB 的大数据。以前使用 DataTable.Load() 方法在 DataTable 中填充此数据。但它导致了性能问题,并且由于数据大小,DataTable 没有响应。

Using reader As DbDataReader = cmdHelper.ExecuteReader(CommandBehavior.CloseConnection)
    Using rstResult As New DataTable()
        rstResult.Locale = CultureInfo.InvariantCulture
        rstResult.Load(reader)
        Return rstResult
    End Using
End Using

但是现在为了提高性能开始直接使用DataReader,但是由于DatReader是连接架构,DB连接会一直打开直到BusinessLogic完成。

Dim cnHelper As New DbConnectionHelper(_strDBConnection)
Dim cmdHelper As DbCommandHelper = cnHelper.CreateCommandHelper(strSP)
cmdHelper.Command.CommandType = CommandType.StoredProcedure

Dim reader As DbDataReader = cmdHelper.ExecuteReader(CommandBehavior.CloseConnection)
Return reader

所以,我不想使用 DatReader,因为 DB 连接将在执行 BusineesLogic 之前打开。

在这种情况下,是否有任何替代方法可以在不使用 DataReader 的情况下提高性能?

4

2 回答 2

0

在这种情况下,是否有任何替代方法可以在不使用 DataReader 的情况下提高性能?

由于 DataReader 是面向连接的,它将保持与数据库的连接打开,如果您负担不起,无法加载 DataTable/DataSet 中的所有数据,那么我想其他选择是从数据库中以块的形式加载数据DataTable并为此努力。否则我认为没有其他选择。

于 2013-02-13T05:52:09.870 回答
0
  1. 使用存储过程获取数据
  2. 优化您的查询
  3. 如果您不想使用 DataReader 而不是部分加载数据(技术之一是分页)。
于 2013-02-13T06:01:02.440 回答