我在下面的场景中运行,这让我颇为头疼,因为我无法找到我所看到的行为的确切解释。我有以下声明:Pro * C性能差异
struct test_struct
{
long testv1;
char testv2[51];
long testv3;
};
,并在Oracle 10g中相应的表:
CREATE TABLE test_table
(
testv1 NUMBER(10, 0),
testv2 VARCHAR(50),
testv3 NUMBER(4, 0)
);
要在此表中访问数据我有一个函数:
bool getTestData(long test_var1, struct test_struct *outStruct)
,在这里我看到我需要解释但不能的差异。如果函数体看起来是这样的:
EXEC SQL BEGIN DECLARE SECTION;
long testvar1_param = test_var1;
struct test_struct *resStruct = outStruct;
EXEC SQL END DECLARE SECTION;
EXEC SQL SELECT testv1, testv2, testv3
INTO :resStruct
FROM test_table
WHERE testv1 = :testvar1_param;
我得到性能更慢那么如果函数体中的样子:
EXEC SQL BEGIN DECLARE SECTION;
long testvar1_param = test_var1;
long *testv1_res = &(outStruct->testv1);
char *testv2_res = outStruct->testv2;
long *testv3_res = &(outStruct->testv3);
EXEC SQL END DECLARE SECTION;
EXEC SQL SELECT testv1, testv2, testv3
INTO :testv1_res, :testv2_res, :testv3_res
FROM test_table
WHERE testv1 = :testvar1_param;
在第二个表现是由显著边缘不同。
有谁知道什么可以解释这种行为?
由于这是由其他人构建的,并试图重新构建此解决方案将花费大量时间,这不是数据复制操作。不幸的是,这更多地用于IPC。不要拍摄信使我没有拿出这个... – Karlson 2012-01-11 15:01:26
尝试使描述的痕迹和检查结果。没有拍摄从我身边,我来平安;-) – 2012-01-11 15:21:17
@卡尔森你发现了什么? – 2012-01-13 06:29:09