Windows 7'de dizin önceliklendirme ve satır kümesi olayları

Bu konu başlığı altında, Windows 7 için dizin öncelik belirleme ve satır kümesi olaylarının tanıtılması açıklanmaktadır.

Bu konu aşağıdaki gibi düzenlenmiştir:

Dizin öncelik belirleme ve satır kümesi olayları

Windows 7?ve sonraki sürümlerde, belirli bir sorgunun bağlamının içinde bir öncelik yığını vardır. İstemci, söz konusu sorguda kullanılan kapsamların normal öğelerden daha öncelikli olmasını isteyebilir.

Bu öncelik belirleme yığını aşağıdaki özelliklere sahiptir:

  • Yığındaki öğeler öncelik olarak ön plan, yüksek veya düşük önceliğe sahip olabilir.
    • Ön Plan: Geri alma mantığı atlanır ve dizinleme işlemi, makinenin izin verdiği kadar hızlı bir şekilde devam eder.
    • Yüksek: Geri çekme ile önceliklendirme istendi.
    • Düşük: Öncelik belirleme istendi, yığındaki diğer kapsamlar pahasına değil, önceliklendirilmemiş dizin oluşturmanın üzerinde.
  • Yüksek veya ön plan önceliğine yönelik tüm istekler, istekte bulunan sorguyu yığının en üstüne otomatik olarak taşır.
  • Yalnızca yığının üstündeki öğe ön plan önceliğine sahip olabilir.
  • Öncelik seviyesi düşürülen ön plan önceliğine sahip bir sorgu, ön plan önceliğini kaybettiğini ve geri çekilmeyle yüksek öncelik seviyesine yükseltildiğini bildiren bir olay alır.

Öncelik yığını, dizin oluşturucuda işlenen öğelerin genel önceliğini aşağıdaki gibi ayarlar:

  • Yüksek Öncelikli bildirimlerin geri çekilmesi yoktur ve genellikle yalnızca az sayıda öğe için gönderilir. Örneğin, Windows Gezgini küçük kopyalama altyapısı işlemleri için bu önceliği kullanır.

  • Priority Stack yığının en üstündedir, geri çekilme özelliğine sahiptir ve son istenen öncelik sorgusudur.

  • Yığındaki ikinci sorgu.

  • Yığındaki üçüncü sorgu.

  • Yığındaki dördüncü sorgu ve benzerleri.

  • Normal Öncelikli öğeler.

  • Silinmiş öğeler.

    Not

    Her grup içindeki öğelere, eski öğe başına semantik aracılığıyla dahili olarak önceliklendirilir.

     

IRowsetPriorization örnekleri

Öncelik belirleme çalışması için birincil API, döndürülen satır kümesi sorgulanarak çağrılabilen aşağıdaki arabirim aracılığıyla kullanılabilir:

typedef [v1_enum] enum
{
    PRIORITY_LEVEL_FOREGROUND           = 0,    // process items in the scope first as quickly as possible
    PRIORITY_LEVEL_HIGH                 = 1,    // process items in the scope first at the normal rate
    PRIORITY_LEVEL_LOW                  = 2,    // process items in this scope before those at the normal rate, but after any other prioritization requests
    PRIORITY_LEVEL_DEFAULT              = 3     // process items at the normal indexer rate
} PRIORITY_LEVEL;


[
    object,
    uuid(IRowsetPrioritization_GUID),
    pointer_default(unique)
]
interface IRowsetPrioritization : IUnknown
{
    // Sets or retrieves the current indexer prioritization level for the scope specified by
    // this query.

    HRESULT SetScopePriority( [in] PRIORITY_LEVEL priority, [in] DWORD scopeStatisticsEventFrequency );
    HRESULT GetScopePriority( [out] PRIORITY_LEVEL * priority, [out] DWORD * scopeStatisticsEventFrequency );

    // Gets information describing the scope specified by this query:
    // indexedDocumentCount     -   The total number of documents currently indexed in the scope
    // oustandingAddCount       -   The total number of documents yet to be indexed in the scope (those not yet included in indexedDocumentCount)
    // oustandingModifyCount    -   The total number of documents indexed in the scope that need to be re-indexed (included in indexedDocumentCount)
    
    HRESULT GetScopeStatistics( [out] DWORD * indexedDocumentCount, [out] DWORD * oustandingAddCount, [out] DWORD * oustandingModifyCount );
};

Satır kümesi öncelik belirlemesi aşağıdaki gibi çalışır:

  1. IRowsetPrioritization, dizin oluşturucu satır kümesinde IUnknown::QueryInterface Yöntemi ile elde edilir. DBPROP_ENABLEROWSETEVENTS satır kümesi önceliklendirmesini kullanmak için sorguyu yürütmeden önce OLE DB ICommandProperties::SetProperties yöntemiyle TRUE olarak ayarlanmalıdır.
  2. IRowsetPrioritization::SetScopePriority sorguya ait kapsamlar için öncelik belirlemeyi ayarlar ve sorgu kapsamları içinde dizine eklenecek bekleyen belgeler olduğunda kapsam istatistikleri olayının tetiklendiği aralığı ayarlar. Bu olay, öncelik düzeyi varsayılan seviyeye ayarlanırsa gerçekleşir.
  3. IRowsetPrioritization::GetScopeStatistics, kapsamdaki dizine alınan öğe sayısını, kapsama eklenecek bekleyen belge sayısını ve bu kapsamda yeniden dizine alınması gereken belge sayısını almak için kullanılabilir.

IRowsetPrioritization olayları

IRowsetEvents::OnRowsetEvent içerisinde, ROWSETEVENT_TYPE numaralandırmasında üç satır kümesi olayı vardır.

    // This method allows for future notifications of various actions about your rowset or items within
    // eventType:                               - An identifier of the particular event being sent
    // pVarEventData:                           - The expected value of the EventData for each event type
    //      ROWSETEVENT_TYPE_DATAEXPIRED        - VT_EMPTY
    //      ROWSETEVENT_TYPE_FOREGROUNDLOST     - VT_EMPTY
    //      ROWSETEVENT_TYPE_SCOPESTATISTICS    - VT_VECTOR | VT_UI4 - 3 elements (0 = indexed items, 1 = outstanding adds, 2 = oustanding modifies)

    HRESULT OnRowsetEvent( [in] ROWSETEVENT_TYPE eventType, [in] REFPROPVARIANT eventData );

Satır kümesi olayları aşağıdaki gibidir:

  • ROWSETEVENT_TYPE_DATAEXPIRED olayı, satır kümesini destekleyen verilerin süresinin dolduğunu ve yeni bir satır kümesinin istenmesi gerektiğini gösterir.
  • ROWSET_TYPE_FOREGROUNDLOST olayı, öncelik belirleme yığınında ön plan önceliğine sahip olan bir öğenin daha alt bir seviyeye düşürüldüğünü gösterir, çünkü başka biri bu sorgunun önüne geçerek kendine öncelik tanımıştır.
  • ROWSETEVENT_TYPE_SCOPESTATISTICS olayı, IRowsetPrioritization::GetScopeStatistics yöntem çağrısında sağlanan bilgilerin aynısını ancak bir gönderme mekaniği aracılığıyla aşağıdaki gibi sağlar:
    • Öncelik belirleme API'sinin varsayılan olmayan bir öncelik belirleme düzeyi ve sıfır olmayan istatistik olay sıklığı istemek için kullanılması durumunda olay ortaya çıkar.
    • Olay yalnızca istatistikler gerçekten değiştiğinde ve IRowsetPrioritizationbelirtilen aralık geçtiğinde ortaya çıkar (aralık olayın sıklığını garanti etmez).
    • Sıfır olmayan bir olay tetiklendiği takdirde, bu olayın "sıfır sekme" durumunu (eklenecek sıfır öğe, sıfır değişiklik kaldı) tetiklediği garanti edilir.
    • Dizin oluşturucu, istatistiksel olay sıklığı dolmadan kuyruk boşalırsa bu olayı göndermeden öğeleri işleyebilir.

Ek kaynaklar

Öncelik belirleme ve satır kümeleri ile ilgili aşağıdaki kaynaklara bakın:

Windows 7 Arama Özelliği

Windows 7 Arama için Yeni

Windows 7'deki Windows Kabuğu Kitaplıkları