Bagikan melalui


struktur OVERRIDE_PREFETCH_PARAMETER (processthreadsapi.h)

Menyediakan kontrol tambahan atas fungsionalitas App Launch Prefetch (ALPF).

Sintaks

typedef struct OVERRIDE_PREFETCH_PARAMETER {
  UINT32 Value;
} OVERRIDE_PREFETCH_PARAMETER;

Anggota

Value

Pengidentifikasi unik untuk membedakan tampilan atau mode aplikasi.

Keterangan

Prefetch Peluncuran Aplikasi (ALPF) membawa halaman data dan kode ke dalam memori dari disk sebelum diminta. Prefetching memantau data dan kode yang diakses selama startup aplikasi dan menggunakan informasi tersebut di awal startup berikutnya untuk membaca kode dan data secara proaktif dengan cara yang efisien untuk meningkatkan performa.

Jika ALPF memprediksi dengan tidak benar, halaman yang salah dapat diambil, memperlambat peluncuran aplikasi. Aplikasi dengan "Tampilan" yang berbeda, seperti Tampilan Email Outlook atau Tampilan Kalender, dapat menyebabkan masalah ini dengan memerlukan halaman memori yang berbeda tergantung pada Tampilan. Untuk mengatasinya, aplikasi dapat meneruskan parameter prefetch ke peluncurannya melalui baris perintah, yang akan menyediakan pengidentifikasi unik untuk membedakan antara Tampilan atau skenario lain yang menyebabkan prediksi standar ALPF gagal.

Namun, dalam beberapa kasus, prefetching tidak selalu berhasil menyelesaikan kegagalan. Misalnya, kegagalan dapat terjadi ketika jalur kode yang berbeda dalam executable yang sama memerlukan halaman yang berbeda tetapi startup tersebut diluncurkan dengan parameter prefetch yang sama. Untuk mengatasi jenis situasi ini, OVERRIDE_PREFETCH_PARAMETER dapat digunakan oleh aplikasi untuk mengambil alih parameter prefetch sistem (lihat fungsi SetProcessInformation).

Contoh

Contoh kode berikut menunjukkan cara menggunakan API penimpaan prefetch saat aplikasi diluncurkan dengan parameter prefetch baris perintah 2.

  1. Asumsikan ini adalah peluncuran pertama aplikasi, sehingga instans aplikasi menunjuk dirinya sebagai proses utama.
  2. Proses utama ini meminta nilai maksimum yang diizinkan dari OVERRIDE_PREFETCH_PARAMETER.
  3. Setelah dikonfirmasi bahwa nilai penimpaan kurang dari maksimum ini (ketika aplikasi diluncurkan dengan parameter prefetch 2), nilainya ditimpa dengan nilai 9 dengan panggilan ke fungsi SetProcessInformation menggunakan nilai ProcessInformationprocessOverrideSubsequentPrefetchParameter.
  4. ALPF tahu bahwa Parameter Penimpaan Prefetch telah ditetapkan.
  5. Instans GenericApp.exe lain diluncurkan dengan parameter prefetch baris perintah 2. Instans ini akan bersifat sementara karena proses utama sudah ada.
  6. Karena penimpaan dari 2 hingga 9 telah ditetapkan untuk executable ini, ALPF akan memaksa instans sementara ini untuk diluncurkan dalam skenario 9 alih-alih 2.
  7. ALPF sekarang mengambil halaman yang sesuai untuk proses utama di bawah skenario 2 dan sekumpulan halaman terpisah untuk proses lain di bawah skenario 9.
  8. Ketika proses utama aplikasi ditutup, penimpaan akan dihapus, memungkinkan peluncuran GenericApp.exe berikutnya menjadi primer.
int main (int argc, char *argv[]) {
    
    BOOL IsThisProcessPrimary;
    
    IsThisProcessPrimary = CheckIfProcessPrimary();
    
    if (!IsThisProcessPrimary) {    
    // This process is transient; it does not call the Override Prefetch Parameter API.
    PassTransientDataToPrimary(argc, argv);    
    goto Exit;    
    } else {    
    // This process is primary; attempt to call Override Prefetch Parameter    
    // before doing primary initialization.    
    SetOverridePrefetchParameter(9);
    
    InitializeThisProcessAsPrimary(argc, argv);    
    DisplayToUserAndWait();    
    }
    
Exit:
    
    return 0;    
}

DWORD SetOverridePrefetchParameter (UINT32 OverrideParameter) {
    
    OVERRIDE_PREFETCH_PARAMETER ParamInfo;    
    DWORD ErrorCode;    
    BOOL Win32Success;
    
    ZeroMemory(&ParamInfo, sizeof(ParamInfo));
    
    // Get the maximum Override Prefetch Parameter from    
    // GetProcessInformation.
    
    Win32Success = GetProcessInformation(GetCurrentProcess(),    
        ProcessOverrideSubsequentPrefetchParameter,    
        &ParamInfo,    
        sizeof(ParamInfo));
    
    if (!Win32Success) {    
        ErrorCode = GetLastError();
        goto Exit;    
    }
    
    if (OverrideParameter <= ParamInfo.OverrideScenarioId) {    
        ParamInfo.Value = OverrideParameter;    
    } else {    
        // The Override Prefetch Parameter requested isn't valid on this system.    
        // Continue to launch without setting an Override Prefetch Parameter.    
        ErrorCode = ERROR_INVALID_PARAMETER;    
        goto Exit;    
    }
    
    Win32Success = SetProcessInformation(GetCurrentProcess(),    
        ProcessOverrideSubsequentPrefetchParameter,    
        &ParamInfo,    
        sizeof(ParamInfo));
    
    if (!Win32Success) {    
        ErrorCode = GetLastError();    
        goto Exit;    
    }
    
    Exit:    
        ErrorCode = ERROR_SUCCESS;    
        return ErrorCode;    
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows XP [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2003 [hanya aplikasi desktop]
Header processthreadsapi.h

Lihat juga

PROCESS_INFORMATION_CLASS enumerasi, fungsi GetProcessInformation