我使用以下代码将数据从SAP DI(SQL Query)加载到DataTable:
namespace SAPApp
{
class SAPData
{
public void GetSAPData(Company oCompany)
{
if (oCompany.Connected)
{
dt.TableName = _TableName;
DataColumn dtColumn;
DataRow dtRow;
Cursor.Current = Cursors.WaitCursor;
SAPbobsCOM.Recordset oRecordSet;
oRecordSet = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoRecordset);
oRecordSet.DoQuery(SQL);
oRecordSet.MoveFirst();
dt.BeginLoadData();
int colCount = oRecordSet.Fields.Count;
for (int i = 0; i < colCount; i++)
{
string colName = oRecordSet.Fields.Item(i).Name;
BoFieldTypes ftype = oRecordSet.Fields.Item(i).Type;
var dType = Type.GetType("System.String");
if (ftype == BoFieldTypes.db_Date)
dType = Type.GetType("System.DateTime");
else if (ftype == BoFieldTypes.db_Numeric)
dType = Type.GetType("System.Decimal");
dtColumn = new DataColumn()
{
DataType = dType,
ColumnName = colName,
Caption = colName,
};
dt.Columns.Add(dtColumn);
}
while (!oRecordSet.EoF)
{
dtRow = dt.NewRow();
for (int i = 0; i < colCount; i++)
dtRow[i] = oRecordSet.Fields.Item(i).Value;
dt.Rows.Add(dtRow);
oRecordSet.MoveNext();
}
dv = new DataView(dt);
dt.EndLoadData();
Cursor.Current = Cursors.Default;
}
}
工作正常!当SAPbobsCOM.company和Company.Connect()在主窗体(单窗体应用程序)中“本地”定义时,执行需要0.222秒。但是当我将SAPbobsCOM.company对象移动到一个“外部”类时,相同的代码运行时间为+22秒(将应用程序移动到MDI)。
本地声明:
namespace SAPApp
{
public partial class FrmMain : Form
{
private readonly Company oCompany = new Company();
...
// Call in main form
SAPData SDAcc = new SAPData;
SDAcc.GetSAPData(oCompany); // param: oCompany object
对外声明:
\\ First create a TSapDI with oCompany objet
namespace SAPApp.Commons
{
public partial class TSapDI
{
public readonly Company oCompany = new Company();
\\ Then instantiate in Globals
namespace SAPApp.Commons
{
internal class Globals
{
public static TSapDI SapDI = new TSapDI();
\\ Create method in Commons
namespace SAPApp
{
class SAPData
{
public void GetSAPData(Company oCompany)....
\\ Finally call it
SAPData SDSearch = new SAPData
SDSearch.GetSAPData(Globals.SapDI.oCompany); // param: Globals.SapDI.oCompany object
在第一种情况下,VisualStudio可以检查GetSAPData中的oCompany对象,但在第二种情况下不能。
有人能帮助我理解为什么会有这样的差异吗?如果可能的话,如何解决这个问题?谢谢
P.S.我认为这与oCompany从静态对象变为非静态对象有关。
我需要在不到1秒的代码执行。
1条答案
按热度按时间yvt65v4c1#
我找不到确切的原因,但我最终更新了代码:
然后将所有引用从以下位置更改:Globals.SapDI.oCompany到TSapDI.oCompany,它在0.222秒内恢复运行:-D
PS我需要改变一些其他的东西来允许这种改变。