Domanda

Ho letto da qualche parte, anche se non ricordo dove, che l'allocazione della parola chiave lock in C # può allocare.

So che il tentativo di bloccare un ValueType impacchetterà il valore, ma ci sono altre situazioni?

EDIT ::

  1. Tutti sembrano rispondere al caso di valore, lo so già!
  2. So anche cosa sono i lucchetti e come usarli in profondità, è un consiglio generale sulle migliori pratiche bello - ma inutile;)
  3. Ho bisogno di so perché sto costruendo un'app XNA per la distribuzione su xbox. La xbox Garbage Collector è molto lento - questo significa che devo mantenere allocazioni al minimo, preferibilmente inesistente (che impedisce il collezionista da sempre in esecuzione)
È stato utile?

Soluzione

Mentre l'allocazione di see sync block internamente è pigra (ma questo è un dettaglio di implementazione che IIRC conosco dal "volume 1" di Essential.NET, o è CLR tramite C # - e dovrebbe essere trattato come quello), il semplice il caso dell'articolo che deve essere inscatolato come suggerito non si presenta - vedi Perché lock (< integer var >) non è consentito, ma Monitor.Enter (< integer var >) consentito?

Altri suggerimenti

Se stavi pensando di usare:

blocco (questa)

Dovresti saperlo perché stai cercando la tua istanza, i tuoi utenti la classe potrebbe anche bloccarsi e rovinarti. Che sia o meno un il problema dipende da cosa pensi che possano fare i tuoi utenti. La stessa situazione esiste se stai facendo:

Blocco (typeof (MyClass))

Se non vuoi farlo, puoi facilmente allocare una statica o un'istanza object (ovvero object myLock = new object ()), quindi bloccalo.

Source

Per quanto riguarda il blocco di un tipo di riferimento vs tipo di valore , questo Domanda SO sul blocco di una risorsa quando ottenuta ... ha la risposta:

  

Dipende dal tipo - se a   tipo di riferimento quindi sì, se un valore   digitare n. Questo è anche il motivo per cui dovresti   mai e poi mai bloccare un tipo di valore da allora   il tipo di valore verrà inscatolato e qualsiasi   tentativi successivi di bloccarlo   il valore acquisirà effettivamente un blocco   un oggetto diverso.

Definizione dell'istruzione lock:

  

Dichiarazione di blocco (Riferimenti per C #)

     

La parola chiave lock indica un'istruzione   bloccare come una sezione critica da   ottenere il blocco di mutua esclusione   per un determinato oggetto, eseguendo a   e quindi rilasciare il   bloccare.

Questa una domanda SO sulla parola chiave lock in C # può essere d'aiuto. Puoi anche guardare Perché lock () è non consentito, ma Monitor.Enter () consentito?

La specifica per il compilatore definisce il comportamento di blocco in questo modo :

  

Il tipo di tempo di compilazione di   espressione di una dichiarazione di blocco deve   essere un tipo di riferimento o un > genere   parametro (& # 167; 25.1.1) noto come a   tipo di riferimento. È un tempo di compilazione   errore per il tipo di tempo di compilazione di   espressione per indicare un tipo di valore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top