C: WPF

2016-05-16 33 views
6

uygulamasında yavaşlatan metin kutuları ve özel sözlükler ile yazım denetimi, yazım denetimi için WinForm uygulamamın içinde bir WPF TextBoxes kullanıyorum. Her oluşturduğumda, aynı dosyayı CustomDictionary olarak yüklerim. Her şey yakın zamana kadar iyiydi. Şimdi, yüklemek için uzun bir zaman alıyorlar, bir saniyeye kadar. Bazı formlar 30 veya daha fazladır, yani yaklaşık yarım dakika gecikmeler demektir. Bu durum Windows 10 (orijinal olarak yayınladığım Windows 8 değil) gibi görünüyor. Uygulama DotNet 4.0 altında çalışıyor, 4.5 ve 4.6 (4.61 değil) denedim ve tüm sürümleri yavaş.C: WPF

Sfaust’ın sorusunu Spell check textbox in Win10 - Slow ve am7zd’nin cevabını gördüm. Bunlar sayesinde, HKEY_CURRENT_USER \ Software \ Microsoft \ Spelling \ Dictionaries içinde GLOBAL kayıt defteri anahtarına baktım. 580 girdim var (dosyaları eşleştirmeden girişleri budamadan sonra) ve hala işler yavaş. Şu anda

, her zaman bir TextBox oluşturmak ve buna bir özel sözlük ekle, yeni bir giriş özel sözlük yüklenirken daha şeyler yapmanın daha iyi bir yolu var mı

  • _GLOBAL_

    üretilen gibi görünüyor her seferinde dosyadan?
  • Aynı girişi yeni bir tane oluşturmak yerine her defasında _GLOBAL_ içinde yeniden kullanmanın bir yolu var mı?
  • Uygulamayı kapatırken (veya yeniden başlatırken) uygulamanızın ve eşleşen .dic dosyalarının oluşturduğu GLOBAL önceki girişlerini temizlemenin temiz bir yolu var mı?
  • Uygulamamı her başlattığımda _GLOBAL_'ı tamamen temizleyebilirim. Bu istediğim hızı geri getiriyor, ama olumsuz olan nedir?

Minnetle verilen herhangi bir öneri. herkesten

cevap

3

cevap yok, bu nedenle bu Yaptığım budur: Ben emin oldum

  1. onlar üzerinde formu kapatmadan önce özel sözlükleri tüm metin üzerinde CustomDictionaries.Remove kullanın. Bu, _GLOBAL_ içindeki yeni girdilerden ve AppData \ Local \ Temp içindeki ilgili dosyalardan kurtulur.

Ama böylece terslik veya kullanıcı sadece bir yerde _GLOBAL_ girdileri ve .dic dosyaları bırakarak görev sona erdiğinde kez olacak:

  1. ben bir şeyi daha ileriye götürmeye karar verdi. Uygulamamı başlattığımda, yalnızca eşleşen dosyaları (yukarıda, önceki başvuruda belirtildiği gibi) olmayan ve aynı zamanda AppData \ Local \ Temp .dic dosyalarına başvuran tüm girdileri kaldırmak için _GLOBAL_ içindeki girdileri temizlemeyeceğim. Benim teorilerim, oraya girişleri bırakmış olan herkesin bir anlamı yoktu, aksi takdirde .dic dosyasını farklı bir klasöre (Microsoft Office'in yaptığı gibi) kaydetmiş olabilirler.

    try 
        { 
    
         string[] allDictionaries = (string[])Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Spelling\Dictionaries", "_Global_", new string[0]); 
    
         if (allDictionaries.Count() > 0) 
         { 
          List<string> realDictionaries = new List<string>(); 
          bool changedSomething = false; 
    
          foreach (string thisD in allDictionaries) 
          { 
           if (File.Exists(thisD)) 
           { 
            if (thisD.Contains(@"\AppData\Local\Temp\")) 
            { 
             // Assuming that anyone who wants to keep a permanent .dic file will not store it in \AppData\Local\Temp 
             // So delete the file and don't copy the name of the dictionary into the list of good dictionaries. 
             File.Delete(thisD); 
             changedSomething = true; 
            } 
            else 
            { 
             realDictionaries.Add(thisD); 
            } 
           } 
           else 
           { 
            // File does not exist, so don't copy the name of the dictionary into the list of good dictionaries. 
            changedSomething = true; 
           } 
          } 
    
          if (changedSomething) 
          { 
           Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Spelling\Dictionaries", "_Global_", realDictionaries.ToArray()); 
          } 
         } 
        } 
        catch (Exception ex) 
        { 
         MessageBox.Show(this, "Error clearing up old dictionary files.\n\nFull message:\n\n" + ex.Message, "Unable to delete file", MessageBoxButtons.OK, MessageBoxIcon.Warning); 
        } 
    

o AppData \ Local \ Temp dosyalara bakınız _GLOBAL_ girişleri temizlemek için tamamen güvenli olup olmadığını hala merak ediyorum. Kesinlikle insanlar geçici bir klasörde önemli şeyler bırakmamalılar, değil mi?

Gerçekten çok güzel olurdu CustomDictionaries.Add dosyasının aynı adı taşıyan aynı metin kutusundaki tüm metin kutularına izin veren .dic dosyasının adını ve klasörünü ayarlamanıza izin veren bir aşırı yükleme olurdu.Dic dosyası ve biz gereksiz yere girişler ve dosyaları ilk etapta asılı görünüşte rastgele isimleri ile bırakmayın emin olun ..... lütfen Microsoft.

+0

Gerçekten iyi bir açıklama arkadaşı. Şu anda aynı problemle karşılaşıyorum (win8 harika çalıştı ama şimdi win10'da sadece bazı makinelerde yavaş çalışıyor). Sanırım seninki gibi bir geçici çözüm uygulayacağım, ama sadece yan etkilerin _Global_ değişken içeriğinin (örneğin MS Word yazım hatalarını kaybetmesi?) –

+0

Word'ü ve (tüm görebildiğim kadarıyla) tüm Office'i kaldırabileceğini merak ediyorum. ürünler, _GLOBAL_: C: \ Users \ yourusername \ AppData \ Roaming \ Microsoft \ Office \ 16.0 \ fbf00836 \ Prova \ RoamingCustom.dic dosyasında böyle bir şeye tek bir giriş kullanır. Bu nedenle, AppData \ Local \ Temp içindeki girdileri temizleyerek etkilenmez. Ben sadece .dic dosyaları için bu Temp klasörünü kullanan özel sözlükler ile DotNet programları olup olmadığını merak ediyorum, ama bu konuda yazılmış başka bir şey bulamadık. – Michael