Freigeben über


Gewusst wie: Vorhersehen von Speicherengpässen bei isoliertem Speicher

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, die 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, stellt die IsolatedStorage-Klasse drei schreibgeschützte Eigenschaften bereit: AvailableFreeSpace, UsedSize und Quota. Mit diesen 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 IsolatedStorage.Quota-Eigenschaft von den Beweisen der Assembly abhängig ist. Daher sollte diese Eigenschaft nur für IsolatedStorageFile-Objekte aufgerufen werden, die unter Verwendung der Methoden GetUserStoreForAssembly, GetUserStoreForDomain oder GetStore erstellt wurden. IsolatedStorageFile-Objekte, die auf andere Weise erstellt wurden, (z. B. Objekte, die von der GetEnumerator-Methode zurückgegeben wurden), geben keine genaue maximale Größe zurück.

Beispiel

Im folgenden Codebeispiel werden ein isolierter Speicher abgerufen, mehrere Dateien erstellt und die AvailableFreeSpace-Eigenschaft abgerufen. Der restliche Speicherplatz wird in Bytes angegeben.

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

Public Class CheckingSpace
    Public Shared Sub Main()
        ' Get an isolated store for this assembly and put it into an
        ' IsolatedStoreFile object.
        Dim isoStore As IsolatedStorageFile = _
            IsolatedStorageFile.GetStore(IsolatedStorageScope.User Or _
            IsolatedStorageScope.Assembly, 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)

        Console.WriteLine(isoStore.AvailableFreeSpace + " bytes of space remain in this isolated store.")
    End Sub ' End of Main.
End Class
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);

        Console.WriteLine(isoStore.AvailableFreeSpace + " bytes of space remain in this isolated store.");
    } // End of Main.
}
using namespace System;
using namespace System::IO;
using namespace System::IO::IsolatedStorage;

public ref 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, (Type ^)nullptr, (Type ^)nullptr);

        // Create a few placeholder files in the isolated store.
        gcnew IsolatedStorageFileStream("InTheRoot.txt", FileMode::Create, isoStore);
        gcnew IsolatedStorageFileStream("Another.txt", FileMode::Create, isoStore);
        gcnew IsolatedStorageFileStream("AThird.txt", FileMode::Create, isoStore);
        gcnew IsolatedStorageFileStream("AFourth.txt", FileMode::Create, isoStore);
        gcnew IsolatedStorageFileStream("AFifth.txt", FileMode::Create, isoStore);

        Console::WriteLine(isoStore->AvailableFreeSpace + " bytes of space remain in this isolated store.");
    } // End of Main.
};

int main()
{
    CheckingSpace::Main();
}

Siehe auch

Referenz

IsolatedStorageFile

Konzepte

Isolierte Speicherung

Gewusst wie: Erhalten von Speichern für isolierten Speicher

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

Dezember 2010

Informationen über die AvailableFreeSpace-Eigenschaft wurden hinzugefügt.

Informationsergänzung.