C++ 'da aşağıdaki çağrıyı kullanırsam, işlemin WorkingSet'inin 100MB'nin altına düşmemesini beklerdim.Bir işlemin WorkSet'inin C++'da 1GB olmasını zorlamanın bir yolu var mı?
Ancak, OS hala bu çağrıyı yapmak bile geri 16MB ayarlı çalışma kırpar. 100MB için
Ayar WorkingSet yumuşak sayfa sayfa hatalarında (aşağıdaki şemaya bakın) ortadan kaldırarak, başvurum hızında çarpıcı bir artışa yol açacak.
Neyi yanlış yapıyorum? (Uzmanlar için ekstra)
SIZE_T workingSetSizeMB = 100;
int errorCode = SetProcessWorkingSetSizeEx(
GetCurrentProcess(),
(workingSetSizeMB - 1) * 1024 * 1024), // dwMinimumWorkingSetSize
workingSetSizeMB * 1024 * 1024, // dwMaximumWorkingSetSize,
QUOTA_LIMITS_HARDWS_MIN_ENABLE | QUOTA_LIMITS_HARDWS_MAX_DISABLE
);
// errorCode returns 1, so the call worked.
Deneysel Metodoloji ben 100MB üzerinden WorkingSet (Süreç Explorer içinde bakıldığında) getirmek için verilerin 100MB tahsis için bir test C++ projesini yazdı
, o ayırmanın bellek. Ancak, OS, bu belleği tahsis ettiğim anda WorkSet'i 16MB'ye geri çekti. Dilerseniz kullandığım C++ projesini sağlayabilirim. işe görünmüyorsa
Neden, Windows SetProcessWorkingSetSizeEx() çağrısı sağlıyor? Yanlış bir şey yapmalıyım.Aşağıdaki diyagram yeşil hat (çalışma kümesi) 30 MB 50MB düştü yumuşak sayfa hataları sayısındaki dramatik artış (kırmızı artışlar) gösterir. çok bu performansı değil etkisi olarak
Sonunda
Güncelleme, biz sorunu görmezden sona erdi.
Daha da önemlisi, SetProcessWorkingSetSizeEx değil kontrolü akım WorkingSet yapar ve yumuşak sayfa hatalarına karşı herhangi bir biçimde alakalı değil olduğunu. Tümü, mevcut WorkSet'in sabit sürücüye disk belleği verilmesini engelleyerek, zor sayfa hatalarını önler. bir yumuşak sayfa hataları azaltmak istiyorsa zor sayfa hataları belirtir olarak başka deyişle
, SetProcessWorkingSetSizeEx, kesinlikle hiçbir etkisi yoktur.
"C/C üzerinden Windows'un ++" Windows bellek ile nasıl başa (Richter) büyük bir writeup yoktur.
İşletim Sisteminin, bellekte olduğundan daha fazla sayfayı bellekte tutmasını nasıl beklersiniz? –
@James McNellis İşletim Sistemi, WorkSet'te daha fazla sayfa tutabildiyse, sayfa hataları azalır, bu da programı önemli ölçüde hızlandırabilir. Sunucuda 16 GB boş RAM var ve bu işleme kalıcı olarak ayrılmış 1GB'a zarar vermeyecek (bu da yumuşak sayfa hatalarının sayısını 0'a düşürecektir). – Contango
@Gravitas: Belleğe nasıl ayırıyor ve erişiyorsunuz? – ybungalobill