This example moves through all records in a Recordset twice; once with no cache and once with a 50 record cache. The example then displays the performance statistics for the uncached and cached runs through the Recordset.
/*
CacheStart/CacheSize Properties:
This example moves through all records in a Recordset twice;
once with no cache and once with a 50 record cache.
The example then displays the performance statistics for
the uncached and cached runs through the Recordset.
*/
#include <stdio.h>
#include <time.h>
#include <afxole.h>
#include <dbdao.h>
#include <dbdaoerr.h>
CdbDBEngine dben;
CdbDatabase dbsPubs;
CdbWorkspace wspDefault;
CdbTableDef tdfPerformanceTest;
CdbRecordset rstRemote;
CString strNoCache, strCache;
time_t tmStart, tmNoCache, tmCache;
COleVariant vVal;
LPTSTR szPurpose =
_T("This example moves through ")
_T("all records in the Recordset ")
_T("twice;\n")
_T("once with no cache and ")
_T("once with a 50 record cache."),
szAnnounce = _T(
"Caching Performance Results:\n"),
szAnnounceNoCache = _T(
"Time without caching: %ld\n"),
szAnnounceCache = _T(
"Time with 50 record cache: %ld\n");
wspDefault = dben.Workspaces[0L];
dbsPubs = wspDefault.OpenDatabase(_T("PUBLISH.mdb"));
tdfPerformanceTest = dbsPubs.CreateTableDef(_T("TestData"));
tdfPerformanceTest.SetConnect(
_T("ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers"));
tdfPerformanceTest.SetSourceTableName(
_T("dbo.roysched"));
dbsPubs.TableDefs.Append(tdfPerformanceTest);
rstRemote = dbsPubs.OpenRecordset(_T("TestData"));
// Announce purpose of this test.
printf(szPurpose);
// Start uncached run.
tmStart = time(NULL);
for (int x = 0; x < 2; x++)
{
rstRemote.MoveFirst();
while (!rstRemote.EOF())
{
vVal = rstRemote.GetField(0L);
rstRemote.MoveNext();
}
}
tmNoCache = time(NULL) - tmStart;
// Start cached run.
rstRemote.SetCacheSize(50);
tmStart = time(NULL);
for (int x = 0; x < 2; x++)
{
rstRemote.MoveFirst();
rstRemote.SetCacheStart(rstRemote.GetBookmark());
rstRemote.FillCache();
while (!rstRemote.EOF())
{
vVal = rstRemote.GetField(0L);
rstRemote.MoveNext();
}
}
tmCache = time(NULL) - tmStart;
// Display performance results.
printf(szAnnounce);
printf(szAnnounceNoCache, (long)tmNoCache);
printf(szAnnounceCache, (long)tmCache);
rstRemote.Close();
dbsPubs.Close();