2

Windows Phone 8 用の cocos2dx アプリケーションでいくつかのメモリ リークを見つけたいと考えています。これは Visual Studio Express 2012 です。アプリ プロファイリングIDEのこのリンクを見ました。ただし、ページに記載されているように、「Direct3D アプリでは実行オプションのみを使用できます」。Windows Phone で directxを使用しているため、メモリ プロファイリングのオプションがわかりません。メモリリークを検出するにはどうすればよいですか?cocos2dx

4

1 に答える 1

0

次のコードで、アプリケーションのメモリ使用量を検出できます。App.xaml.cs に次のコードを追加します。

パブリック部分クラス App : アプリケーション {

    private static Timer timer = null;
    public static void BeginRecording()
    {

        if (System.Diagnostics.Debugger.IsAttached)
        {
            // start a timer to report memory conditions every 2 seconds
            timer = new Timer(state =>
            {
                // every 2 seconds do something 
                string report =
                DateTime.Now.ToLongTimeString() + " memory conditions: " +
                Environment.NewLine +
                "\tApplicationCurrentMemoryUsage: " +
                    getExactValue(DeviceStatus.ApplicationCurrentMemoryUsage) + " MB" +
                    Environment.NewLine +
                "\tApplicationPeakMemoryUsage: " +
                    getExactValue(DeviceStatus.ApplicationPeakMemoryUsage) + " MB" +
                    Environment.NewLine +
                "\tApplicationMemoryUsageLimit: " +
                    getActualValue(DeviceStatus.ApplicationMemoryUsageLimit) + " MB" +
                    Environment.NewLine +
                "\tDeviceTotalMemory: " + getActualValue(DeviceStatus.DeviceTotalMemory) + " MB" + Environment.NewLine +
                "\tApplicationWorkingSetLimit: " +
                    getActualValue(Convert.ToInt64(DeviceExtendedProperties.GetValue("ApplicationWorkingSetLimit"))) + " MB" +
                    Environment.NewLine;

                // write to IsoStore or debug conolse
                Debug.WriteLine(report);
            },
            null,
            TimeSpan.FromSeconds(2),
            TimeSpan.FromSeconds(2));
        }
    }
    public static decimal getExactValue(long stats)
    {
        return Math.Round(((decimal)(stats) / (decimal)(1048576.00)), 2);
    }

    public static int getActualValue(long stats)
    {
        return ((int)Math.Ceiling(getExactValue(stats)));
    }

application_launching で BeginRecording() 関数を呼び出すようになりました。これにより、2 秒ごとに正確なメモリ統計が得られ、メモリ リークを特定できます。

于 2014-07-10T05:06:55.223 に答える