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

标签 c# oledb enterprise-library ibm-midrange

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

如果我使用 iSeries 工具和类似参数手动运行存储过程,则大约需要 5 秒。因此,性能下降要么是在与 iSeries 的网络通信中,要么是在企业库的数据库对象中隐藏的某些东西。只是在寻找任何想法。

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);
}

最佳答案

期望它是一些不同于 iSeries 工具和 .NET 客户端的奇怪设置 - 例如:

  • 交易模式?
  • ansi 设置?
  • 其他连接选项? (对于 SQL Server,我指的是 SET CONCAT_NULL_YIELDS_NULL 等)

我对 iSeries 了解不多,但是对于 SQL Server,例如,如果一切都恰到好处,它只能使用“索引持久计算”列;否则它会重新计算每行的公式。

你尝试过跟踪吗?

关于c# - Enterprise Library Database.ExecuteNonQuery 隐藏的性能问题(连接到 IBM iSeries),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/497649/

相关文章:

c# - 我网站的首页无法正确加载 "css"

c# - basic 中 string$ 的 C# 等价物是什么

c# - 如何在 C# 应用程序中接收电子邮件?

c# - .Net 访问超大型数据库的最佳方法是什么?

c# - 如何使用 Exception Manager Enterprise Library 6.0

c# - 设置超时异步 Web 服务调用?

sql-server - SSIS OLEDB 连接管理器 - 无法连接到数据库(未显示数据库名称)

C# OleDb INSERT INTO 溢出异常

c# - 如何将自定义日志存储在使用diagnostics.wadcfg创建的Azure本地存储中

c# - 使用 Unity 框架和验证应用程序 block 验证方法参数