MemoryFailPoint クラスとは? わかりやすく解説

MemoryFailPoint クラス

メモ : このクラスは、.NET Framework version 2.0新しく追加されたものです。

実行前に十分なメモリ リソースがあるかどうかチェックします。このクラス継承できません。

名前空間: System.Runtime
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

Public NotInheritable Class
 MemoryFailPoint
    Inherits CriticalFinalizerObject
    Implements IDisposable
Dim instance As MemoryFailPoint
public sealed class MemoryFailPoint : CriticalFinalizerObject,
 IDisposable
public ref class MemoryFailPoint sealed : public
 CriticalFinalizerObject, IDisposable
public final class MemoryFailPoint extends
 CriticalFinalizerObject implements IDisposable
public final class MemoryFailPoint extends
 CriticalFinalizerObject implements IDisposable
解説解説
メモメモ

このクラスは、拡張開発での使用前提としています。

MemoryFailPoint クラスインスタンス作成すると、メモリ ゲート作成されます。メモリ ゲートとは、大量メモリを必要とするアクティビティ開始する前に十分なリソースがあるかどうかチェックすることです。チェック合格しなかった場合操作開始できないようにする InsufficientMemoryException がスローされるため、リソース不足が原因となってアプリケーション実行中失敗する可能性減少します。これにより、アプリケーションでは、パフォーマンス低下させ、OutOfMemoryException や、コード内の任意の場所で OutOfMemoryException誤って処理したことが原因発生する状態の破損避けることができます

InsufficientMemoryExceptionスローすることにより、操作完了できそうにないという回復可能である予測と、部分的に完了済み操作発生した、状態破損可能性のある OutOfMemoryException とをアプリケーション識別できます。これにより、アプリケーションは、現在の AppDomainアンロードプロセスリサイクルが必要となる可能性のあるペシミスティック発生ポリシー頻度を減らすことができます

MemoryFailPoint は、すべてのガベージ コレクション ヒープ十分なメモリ連続した仮想アドレス空間利用できるかどうかチェックし必要に応じてスワップ ファイルサイズ大きくます。MemoryFailPoint は、ゲート有効期間中にメモリ長期わたって使用できるかどうかについては保証しませんが、呼び出し元は常に Dispose呼び出してMemoryFailPoint関連付けられたリソース解放する必要があります

メモリ ゲート使用するには、操作使用想定されるメモリメガバイト数を指定してMemoryFailPoint オブジェクト作成する必要があります十分なメモリ使用できない場合は、InsufficientMemoryException発生します

コンストラクタパラメータ正の整数である必要があります。負の値であると、ArgumentOutOfRangeException が発生します

使用例使用例

MemoryFailPoint は、メモリの不足による破損を防ぐために、アプリケーション自身処理速度低下させることができるようにデザインされています。これは、構文スコープ内で使用する必要があります作業キュー内の項目を処理するためにスレッド開始するコード例次に示します。各スレッド開始する前にMemoryFailPoint使用して利用できるメモリ リソースチェックします例外スローされた場合メイン メソッドメモリ使用できるうになるのを待って次のスレッド開始します

using System;
using System.Runtime;
using System.IO;
using System.Threading;
using System.Collections.Generic;
using System.Collections;

class MemoryFailPointExample
{
    // Allocate in chunks of 64 megabytes.
    private const uint chunkSize = 64 <<
 20;
    // Use more than the total user-available address space (on 32 bit
 machines)
    // to drive towards getting an InsufficientMemoryException.
    private const uint numWorkItems = 1 + ((1U
 << 31) / chunkSize);
    static Queue workQueue = new Queue(50);

    // This value can be computed separately and hard-coded into the
 application.
    // The method is included to illustrate the technique.
    private static int EstimateMemoryUsageInMB()
    {
        int memUsageInMB = 0;

        long memBefore = GC.GetTotalMemory(true);
        int numGen0Collections = GC.CollectionCount(0);
        // Execute a test version of the method to estimate memory requirements.
        // This test method only exists to determine the memory requirements.
        ThreadMethod();
        // Includes garbage generated by the worker function.
        long memAfter = GC.GetTotalMemory(false);
        // If a garbage collection occurs during the measuring, you
 might need a greater memory requirement.
        Console.WriteLine("Did a GC occur while measuring?
  {0}", numGen0Collections == GC.CollectionCount(0));
        // Set the field used as the parameter for the MemoryFailPoint
 constructor.
        long memUsage = (memAfter - memBefore);
        if (memUsage < 0)
        {
            Console.WriteLine("GC's occurred while measuring
 memory usage.  Try measuring again.");
            memUsage = 1 << 20;
        }

        // Round up to the nearest MB.
        memUsageInMB = (int)(1 + (memUsage >> 20));
        Console.WriteLine("Memory usage estimate: {0} bytes, rounded to {1}
 MB", memUsage, memUsageInMB);
        return memUsageInMB;
    }

    static void Main()
    {
        Console.WriteLine("Attempts to allocate more than 2 GB of memory across
 worker threads.");
        int memUsageInMB = EstimateMemoryUsageInMB();

        // For a production application consider using the threadpool
 instead.
        Thread[] threads = new Thread[numWorkItems];
        // Create a work queue to be processed by multiple threads.
        int n = 0;
        for (n = 0; n < numWorkItems; n++)
            workQueue.Enqueue(n);
        // Continue to launch threads until the work queue is empty.
        while (workQueue.Count > 0)
        {
            Console.WriteLine(" GC heap (live + garbage): {0} MB", GC.GetTotalMemory(false)
 >> 20);
            MemoryFailPoint memFailPoint = null;
            try
            {
                // Check for available memory.
                memFailPoint = new MemoryFailPoint(memUsageInMB);
                n = (int)workQueue.Dequeue();
                threads[n] =
                    new Thread(new ParameterizedThreadStart(ThreadMethod));
                WorkerState state = new WorkerState(n, memFailPoint);
                threads[n].Start(state);
                Thread.Sleep(10);
            }
            catch (InsufficientMemoryException e)
            {
                // MemoryFailPoint threw an exception, handle by sleeping
 for a while,  then 
                // continue processing the queue.
                Console.WriteLine("Expected InsufficientMemoryException thrown.
  Message: " + e.Message);
                // We could optionally sleep until a running worker
 thread 
                // has finished, like this:  threads[joinCount++].Join();
                Thread.Sleep(1000);
            }
        }

        Console.WriteLine("WorkQueue is empty - blocking to ensure all threads
 quit (each thread sleeps for 10 seconds)");
        foreach (Thread t in threads)
            t.Join();
        Console.WriteLine("All worker threads are finished - exiting application.");
    }

    // Test version of the working code to determine memory requirements.
    static void ThreadMethod()
    {
        byte[] bytes = new byte[chunkSize];
    }

    internal class WorkerState
    {
        internal int _threadNumber;
        internal MemoryFailPoint _memFailPoint;

        internal WorkerState(int threadNumber, MemoryFailPoint
 memoryFailPoint)
        {
            _threadNumber = threadNumber;
            _memFailPoint = memoryFailPoint;
        }

        internal int ThreadNumber
        {
            get { return _threadNumber; }
        }

        internal MemoryFailPoint MemoryFailPoint
        {
            get { return _memFailPoint; }
        }
    }

    // The method that does the work.
    static void ThreadMethod(Object o)
    {
        WorkerState state = (WorkerState)o;
        Console.WriteLine("Executing ThreadMethod, " +
            "thread number {0}.", state.ThreadNumber);
        byte[] bytes = null;
        try
        {
            bytes = new byte[chunkSize];
            // Allocated all the memory needed for this workitem.
            // Now dispose of the MemoryFailPoint, then process the
 workitem.
            state.MemoryFailPoint.Dispose();
        }
        catch (OutOfMemoryException oom)
        {
            Console.Beep();
            Console.WriteLine("Unexpected OutOfMemory exception thrown: "
 + oom);
        }

        // Do work here, possibly taking a lock if this app needs 
        // synchronization between worker threads and/or the main thread.

        // Keep the thread alive for awhile to simulate a running thread.
        Thread.Sleep(10000);

        // A real thread would use the byte[], but to be an illustrative
 sample,
        // explicitly keep the byte[] alive to help exhaust the memory.
        GC.KeepAlive(bytes);
        Console.WriteLine("Thread {0} is finished.", state.ThreadNumber);

    }
}
.NET Framework のセキュリティ.NET Frameworkセキュリティ
継承階層継承階層
System.Object
   System.Runtime.ConstrainedExecution.CriticalFinalizerObject
    System.Runtime.MemoryFailPoint
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバ場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照


このページでは「.NET Framework クラス ライブラリ リファレンス」からMemoryFailPoint クラスを検索した結果を表示しています。
Weblioに収録されているすべての辞書からMemoryFailPoint クラスを検索する場合は、下記のリンクをクリックしてください。
 全ての辞書からMemoryFailPoint クラス を検索

英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「MemoryFailPoint クラス」の関連用語

MemoryFailPoint クラスのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



MemoryFailPoint クラスのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.

©2025 GRAS Group, Inc.RSS