2010-10-17 6 views
0

J'ai un exemple de code qui illustre les problèmes dans mon code lorsque GC.Collect est exécuté sur une classe ayant une variable membre ReaderWriterLockSlim. Le GC.Collect prend entre 2 et 3 secondes pour s'exécuter. Je dois effectuer GC à intervalles réguliers parce que mon application est extrêmement intensive en mémoire.Problèmes de vitesse avec ReaderWriterLockSlim et Garbage Collection

namespace WpfApplication12 
{ 
    public class DataItem 
    { 
     private readonly ReaderWriterLockSlim m_propertyLock = new ReaderWriterLockSlim(); 

     public DataItem() 
     { 
     } 
    } 

    /// <summary> 
    /// Interaction logic for Window1.xaml 
    /// </summary> 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 

      List<DataItem> dataItemList = new List<DataItem>(); 
      for (int i = 0; i < 100000; i++) 
      { 
       dataItemList.Add(new DataItem()); 
      } 

      Debug.WriteLine(DateTime.Now.ToString()); 
      GC.Collect(); 
      Debug.WriteLine(DateTime.Now.ToString()); 
     } 
    } 
} 

Est-ce que quelqu'un a eu des problèmes similaires?

Merci Ian

Répondre

1

Je demande si vous avez vraiment besoin d'un ReaderWriterLockSlim pour chacun de vos DataItem cours?

On dirait que c'est un mauvais design d'avoir autant de poignées flottantes. Après tout, c'est ce qui causera le retard ...

0

Le problème de mémoire peut être causé si le lecteurwriterlockslim est appelé à partir de plusieurs threads. Je crois qu'il va stocker des informations sur les threads qui peuvent provoquer la consommation de mémoire à gonfler. Je recommande d'essayer de trouver une solution où vous pouvez réduire le nombre de threads qui appellent le readerwriterlockslim.