다음을 통해 공유


OperationStart 함수(winbase.h)

애플리케이션이 작업을 시작하려고 했음을 시스템에 알 수 있습니다.

애플리케이션이 유효한 OPERATION_ID 값으로 OperationStart를 호출하는 경우 시스템은 OperationEnd가 동일한 작업 ID에 대해 호출될 때까지 지정된 작업의 파일 액세스 패턴을 기록합니다. 이 레코드는 filename.pf 프리페치 파일에 저장됩니다. OperationStart에 대한 모든 호출 뒤에 OperationEnd를 호출해야 합니다. 그렇지 않으면 작업의 레코드는 10초 후에 삭제됩니다.

애플리케이션이 프리페치 파일이 있는 작업 ID에 대해 OperationStart 를 호출하는 경우 시스템은 작업을 실행하기 전에 작업의 파일을 메모리에 로드합니다. 기록 프로세스는 동일하게 유지되며 시스템은 적절한 filename.pf 프리페치 파일을 업데이트합니다.

구문

BOOL OperationStart(
  [in] OPERATION_START_PARAMETERS *OperationStartParams
);

매개 변수

[in] OperationStartParams

VERSION, OPERATION_IDFLAGS를 지정하는 _OPERATION_START_PARAMETERS 구조체입니다.

반환 값

모든 유효한 매개 변수에 대해 TRUE이고 그렇지 않으면 FALSE입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

_OPERATION_START_PARAMETERS 구조체의 버전은 Windows SDK OPERATION_API_VERSION 정의됩니다.

OperationStart 함수는 동기식이므로 반환하는 데 몇 초 정도 걸릴 수 있습니다. 최상의 응답성을 위해 UI 스레드에서는 이 작업을 피해야 합니다.

프로세스에는 단일 instance 작업 레코더가 있습니다. 프로세스 내의 여러 스레드에서 작업 레코더 API를 호출할 수 있지만 모든 호출은 단일 instance 작동합니다.

애플리케이션 시작 추적은 프로세스 수명의 처음 10초 동안 지속됩니다. 시스템에서 애플리케이션 시작 추적이 종료된 후 OperationStart를 호출해야 합니다.

OperationStart에 대한 모든 호출 뒤에 OperationEnd를 호출해야 합니다. 그렇지 않으면 작업 추적은 약 10s 후에 삭제됩니다.

지정된 시스템에 기록할 수 있는 최대 작업 수를 구성할 수 있습니다. 이 최대값을 초과하면 가장 최근에 사용한 프리페치 파일이 대체됩니다.

Windows 8 이 기능을 사용하려면 Superfetch 서비스를 사용하도록 설정해야 합니다. Windows 8 기본적으로 서비스를 사용하도록 설정됩니다. Windows Server 2012 경우 필요에 따라 이 프리페치 기능을 사용하도록 설정하고 사용하지 않도록 설정해야 합니다. CIM 기반 PowerShell cmdlet을 사용하여 이 작업을 수행할 수 있습니다. 프리페처 기능은 CIM_PrefetcherServiceCIM 클래스를 사용하여 노출할 수 있습니다.

예제

    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());
                  }


요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8 [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2012 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 winbase.h(Windows.h 포함)
라이브러리 Advapi32.lib
DLL Advapi32.dll

추가 정보

OPERATION_ID

작업 레코더

OperationEnd

_OPERATION_END_PARAMETERS

_OPERATION_START_PARAMETERS