我在下面的場景中運行,這讓我頗爲頭疼,因爲我無法找到我所看到的行爲的確切解釋。我有以下聲明: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