2016-04-11 39 views
0

Ben test.dll denilen bir DLL var (~ 3MB). Oluşturma işlemimin bir parçası olarak, DLL oluşturulduğu anda başka bir konuma kopyalarım. Aşağıdaki Python kodu aslında benim derleme işlemi değil, ama hala yavaş bir davranış gösteren bir basitleştirilmiş bir durumdur:İlk okuma/kopyalama/yazma benim dll dosyasına 600ms alır

import subprocess 
subprocess.run(["copy", "/Y", "test.dll", "test2.dll"], shell=True) 
subprocess.run(["copy", "/Y", "test2.dll", "test3.dll"], shell=True) 

ilk kopya hızlı (2-15ms) 'dir. İkinci kopya çok yavaş (600ms +). Buna neden olan nedir? Bir SSD'de bile, küçük bir dosyayı oldukça hızlı bir şekilde kopyalamayı beklerdim.

Python'u denklemden kaldırmak için subprocess.run() kullanıyorum. Bu, bir şekilde Windows'a yerleşik bir gecikme gibi görünüyor. Benzer sonuçları shutil.copy() ile ve diğer dilleri kullanarak görüyorum.

cevap

1

Windows Defender (veya başka bir virüsten koruma programı), ilk kopyalama işlemi tamamlandıktan sonra yeni oluşturulan DLL'yi tarıyor. Bu tarama biraz zaman alabilir (bu durumda ~ 600ms). Defender sadece EXE ve DLL gibi yüksek riskli olarak görülebilir, ama muhtemelen başkaları gibi görünüyor. Defender, dosya uzantısını kullanmak yerine, dosyanın türünü belirlemek için dosyanın ilk birkaç baytını kontrol ediyor gibi görünüyor (çünkü uzantı bir EXE/DLL dosyasını gizlemek için önemli ölçüde değiştirilebilir).

Windows Defender'ı devre dışı bırakın ve zamanların iyileşip iyileşmediğini görmek için tekrar çalıştırmayı deneyin. Varsa, Defender'ı yeniden etkinleştirin ve derleme dizini, derleyici ve linker vb. Için bir istisna ekleyin. Yeniden çalıştırın ve sürenin hala iyileştirildiğini onaylayın.

Bir bonus olarak, bu yalnızca kopyalama sürenizi artırmaz, aynı zamanda yapım süreniz de çıkış dosyası başına 600 ms kadar düşecektir.

PSA: me Farkında olmadan (Windows Defender OS ile birlikte geldi en azından beri), bu gecikme neredeyse benim tüm programlama kariyerinde yeni bir EXE veya DLL her yazma işlemi var olmuştu. 600ms çok fazla görünmeyebilir, ancak yaptığım her bir yapı üzerinde birleştiğinde çok fazla ve daha sonra birden çok hedef, dosya kopyaları vb. Bu, Defender'ın kendim oluşturduğum EXE/DLL'yi taramasını beklemek için harcanan çok büyük bir zaman.

+0

Reddetme hakkında ayrıntılı bilgi sahibi olmak ister misiniz? – Lewis

+0

Bazıları, kendi sorularını cevaplayan insanların beğenmediğini görüyor! –