Funzione OperationStart (winbase.h)
Notifica al sistema che l'applicazione sta per avviare un'operazione.
Se un'applicazione chiama OperationStart con un valore di OPERATION_ID valido, il sistema registra i modelli di accesso ai file dell'operazione specificati finché OperationEnd non viene chiamato per lo stesso ID operazione. Questo record viene archiviato in un file di prefetch filename.pf . Ogni chiamata a OperationStart deve essere seguita da una chiamata a OperationEnd, altrimenti il record dell'operazione viene rimosso dopo 10 secondi.
Se un'applicazione chiama OperationStart per un ID operazione per cui esiste un file di prefetch, il sistema carica i file dell'operazione in memoria prima di eseguire l'operazione. Il processo di registrazione rimane invariato e il sistema aggiorna il file di prefetch appropriato filename.pf .
Sintassi
BOOL OperationStart(
[in] OPERATION_START_PARAMETERS *OperationStartParams
);
Parametri
[in] OperationStartParams
Struttura _OPERATION_START_PARAMETERS che specifica VERSION, OPERATION_ID e FLAGS.
Valore restituito
TRUE per tutti i parametri validi e FALSE in caso contrario. Per informazioni dettagliate sull'errore, chiamare GetLastError.
Commenti
La versione della struttura _OPERATION_START_PARAMETERS viene definita come OPERATION_API_VERSION nella Windows SDK.
Poiché la funzione OperationStart è sincrona, può richiedere diversi secondi per restituire. Questa operazione deve essere evitata nei thread dell'interfaccia utente per la migliore velocità di risposta.
È presente una singola istanza del registratore di operazioni in un processo. Anche se le API del registratore di operazioni possono essere chiamate da più thread all'interno del processo, tutte le chiamate agiscono sulla singola istanza.
La traccia di avvio dell'applicazione dura il primo 10 secondo del processo. OperationStart deve essere chiamato dopo la fine della traccia dell'avvio dell'applicazione dal sistema.
Ogni chiamata a OperationStart deve essere seguita da una chiamata a OperationEnd. In caso contrario, la traccia dell'operazione verrà eliminata dopo circa 10.
Il numero massimo di operazioni che possono essere registrate in un determinato sistema è configurabile. Se questo massimo viene superato, i file di prefetch usati meno di recente vengono sostituiti.
In Windows 8 questa funzionalità richiede l'abilitazione del servizio Superfetch. Windows 8 avrà il servizio abilitato per impostazione predefinita. Per Windows Server 2012, questa funzionalità di pre-recupero deve essere abilitata e disabilitata in base alle esigenze. Questa operazione può essere eseguita usando i cmdlet di PowerShell basati su CIM. La funzionalità di prefetcher può essere esposta usando la classe CIM della CIM_PrefetcherService.
Esempio
BOOL Success;
DWORD ErrorCode;
OPERATION_START_PARAMETERS OpStart;
OPERATION_END_PARAMETERS OpEnd;
// We want to notify Windows that we are going to be performing some
// disk-bound work that repeatedly access the same file data. The system will
// try to record data about our activity to make future operations faster.
ZeroMemory(&OpStart, sizeof(OpStart));
OpStart.Version = OPERATION_API_VERSION;
OpStart.OperationId = MY_OPERATION_ID_1;
ZeroMemory(&OpEnd, sizeof(OpEnd));
OpEnd.Version = OPERATION_API_VERSION;
OpEnd.OperationId = MY_OPERATION_ID_1;
// We want the system to only record activity in this thread.
OpStart.Flags = OPERATION_START_TRACE_CURRENT_THREAD;
OpEnd.Flags = 0;
Success = OperationStart(&OpStart);
if (!Success) {
ErrorCode = GetLastError();
fprintf(stderr, "OperationStart failed: %d\n", ErrorCode);
// We could not notify the system about our operation. That's OK.
}
// Perform the disk-bound work that should be recorded here.
// This may involve opening/reading many files or loading
// and running many DLLs.
Success = OperationEnd(&OpEnd);
if (!Success) {
fprintf(stderr, "OperationEnd failed: %d\n", GetLastError());
}
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 8 [solo app desktop] |
Server minimo supportato | Windows Server 2012 [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | winbase.h (include Windows.h) |
Libreria | Advapi32.lib |
DLL | Advapi32.dll |
Vedi anche