Enterprise Library Database.ExecuteNonQuery隐藏的性能问题(连接到IBM iSeries)

时间:2009-01-30 23:17:42

标签: c# oledb enterprise-library ibm-midrange

我想知道在企业库中使用Database对象的隐藏性能影响是什么。我有一个OleDbCommand(type = stored procedue),它调用IBM iSeries存储过程,需要1.5到4.5分钟才能完成。

如果我使用iSeries工具和类似参数手动运行sproc,那么大约需要5秒。因此,性能下降要么在与iSeries的网络通信中,要么在Enterprise库中的Database对象中隐藏。只是寻找任何想法。

m_asi = DatabaseFactory.CreateDatabase("ASI-TEST");
using (var cmd = new OleDbCommand())
{
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = string.Format("{0}.P_VNDR_INV", m_strASISprocCatalog);
    cmd.Parameters.Add("@RUN_ENV", OleDbType.Char, 1).Value = strEnvironmentCode;
    cmd.Parameters.Add("@SIS_KEY", OleDbType.Char, 36).Value = InvFilter.SISKey;
    cmd.Parameters.Add("@FROM_DTE", OleDbType.Char, 8).Value = InvFilter.CheckDateFrom.ToString("yyyyMMdd");
    cmd.Parameters.Add("@TO_DTE", OleDbType.Char, 8).Value = InvFilter.CheckDateTo.ToString("yyyyMMdd");
    cmd.Parameters.Add("@EXT_Y", OleDbType.Char, 1).Value = (InvFilter.IsExternal ? "Y" : "N");
    cmd.Parameters.Add("@INC_Y", OleDbType.Char, 1).Value = (InvFilter.IncludeASI ? "Y" : "N");
    cmd.Parameters.Add("@VND_ID", OleDbType.Char, 1800).Value = InvFilter.GetVendorQueryString(18, 1800);

    // This call is the bottleneck
    m_asi.ExecuteNonQuery(cmd);
}

1 个答案:

答案 0 :(得分:1)

我希望期待它是一个与iSeries工具和.NET客户端不同的奇怪设置 - 例如:

  • 交易模式?
  • ansi settings?
  • 其他连接选项? (对于SQL Server,我的意思是SET CONCAT_NULL_YIELDS_NULL之类的东西等)

我对iSeries知之甚少,但是对于SQL Server,例如,如果一切正常,它只能使用“索引持久计算”列;否则它会重新计算每行的公式。

你试过一下吗?