Gewusst wie: Vorhersehen von Speicherengpässen bei der isolierten Speicherung

Aktualisiert: November 2007

Code, der isolierte Speicherung verwendet, ist durch ein Kontingent begrenzt, das die maximale Größe des Datendepots festlegt, in dem sich isoliert gespeicherte Dateien und Verzeichnisse befinden. Dieser Wert wird durch Sicherheitsrichtlinien festgelegt und kann von Administratoren konfiguriert werden. Wird beim Schreiben von Daten die maximal zulässige Größe überschritten, wird eine IsolatedStorageException ausgelöst, und die Operation schlägt fehl. Dies verhindert böswillige Denial-of-Service-Angriffe, welche die Anwendung dazu veranlassen könnten, aufgrund eines vollen Datenspeichers keine Anforderungen mehr anzunehmen. Um einfacher feststellen zu können, ob ein bestimmter Schreibversuch aus diesem Grund nicht erfolgreich sein könnte, stehen für isolierte Speicher zwei schreibgeschützte Eigenschaften zur Verfügung: IsolatedStorage.CurrentSize und IsolatedStorage.MaximumSize. Mit diesen beiden Eigenschaften kann festgestellt werden, ob beim Schreiben in den Speicher die maximal zulässige Speichergröße überschritten wird. Beachten Sie bei der Verwendung dieser Eigenschaften, dass auf verschiedene isolierte Speicherplätze gleichzeitig zugegriffen werden kann. Wenn Sie den restlichen Speicher berechnen, könnte der Speicherplatz daher aufgebraucht sein, sobald Sie versuchen, in den Speicher zu schreiben. Sie können aber trotzdem die maximale Speichergröße verwenden, um festzustellen, ob die Obergrenze für verfügbaren Speicherplatz bald erreicht ist.

Des Weiteren ist zu beachten, dass die korrekte Funktion der Eigenschaft der maximalen Größe von den Beweisen der Assembly abhängig ist. Daher sollte diese Methode nur für IsolatedStorageFile-Objekte aufgerufen werden, die mit GetUserStoreForAssembly(), GetUserStoreForDomain() oder GetStore() erstellt wurden. IsolatedStorageFile-Objekte, die auf andere Weise erstellt wurden (z. B. durch Rückgabe von GetEnumerator()), geben keine korrekte Angabe der maximalen Größe zurück.

Beispiel "AnticipatingOutOfSpaceConditions"

Durch das folgende Codebeispiel wird ein isolierter Speicher abgerufen, einige Dateien werden erstellt, und die Größe des restlichen Speicherplatzes wird berechnet. Der restliche Speicherplatz wird in Bytes angegeben.

Imports System
Imports System.IO
Imports System.IO.IsolatedStorage

Public Module modmain

   Sub Main()

      ' Get an isolated store for user, domain, and assembly and put it into 
      ' an IsolatedStorageFile object.

      Dim isoStore As IsolatedStorageFile
      isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User Or IsolatedStorageScope.Assembly Or IsolatedStorageScope.Domain, Nothing, Nothing)

      ' Create a few placeholder files in the isolated store.

      Dim aStream As New IsolatedStorageFileStream("InTheRoot.txt", FileMode.Create, isoStore)
      Dim bStream As New IsolatedStorageFileStream("Another.txt", FileMode.Create, isoStore)
      Dim cStream As New IsolatedStorageFileStream("AThird.txt", FileMode.Create, isoStore)
      Dim dStream As New IsolatedStorageFileStream("AFourth.txt", FileMode.Create, isoStore)
      Dim eStream As New IsolatedStorageFileStream("AFifth.txt", FileMode.Create, isoStore)

      ' Use the CurrentSize and MaximumSize methods to find remaining
      ' space.
      ' Cast that number into a long type and put it into a variable.

      Dim spaceLeft As Long
      spaceLeft = CLng((isoStore.MaximumSize.ToString) - isoStore.CurrentSize.ToString)

      Console.WriteLine("CurrentSize: " + isoStore.CurrentSize.ToString)

      Console.WriteLine("Space Left: " + spaceLeft.ToString + " (might be very large if no quota is set)")

   End Sub
End Module
using System;
using System.IO;
using System.IO.IsolatedStorage;

public class CheckingSpace{

   public static void Main(){

      // Get an isolated store for this assembly and put it into an
      // IsolatedStoreFile object.

      IsolatedStorageFile isoStore =  IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);

      // Create a few placeholder files in the isolated store.

      new IsolatedStorageFileStream("InTheRoot.txt", FileMode.Create, isoStore);
      new IsolatedStorageFileStream("Another.txt", FileMode.Create, isoStore);
      new IsolatedStorageFileStream("AThird.txt", FileMode.Create, isoStore);
      new IsolatedStorageFileStream("AFourth.txt", FileMode.Create, isoStore);
      new IsolatedStorageFileStream("AFifth.txt", FileMode.Create, isoStore);

      // Use the CurrentSize and MaximumSize methods to find remaining 
      // space.
      // Cast that number into a long type and put it into a variable.
      long spaceLeft =(long)(isoStore.MaximumSize - isoStore.CurrentSize);

      Console.WriteLine(spaceLeft+ " bytes of space remain in this isolated store.");
      
   }// End of Main.

}

Siehe auch

Konzepte

Gewusst wie: Abrufen eines Speichers für die isolierte Speicherung

Referenz

IsolatedStorageFile

Weitere Ressourcen

Verwenden der isolierten Speicherung