由于FilenotFoundException,在Visual Studio 2013中进行调试非常慢



i在Visual Studio中开发(Windows Phone 8.1的单体组合)。当我使用"不调试"启动我的应用程序时,它的启动非常快,但是在调试中,启动非常慢(大约5分钟,不计算构建时间!)。我看到的问题(Beyound慢加载外部符号)是我的应用程序加载了许多图形文件,但是在加载图片之前,它搜索其高清版本,其高清和本地化版本,并且仅本地化。大多数文件没有HD版本,其中一些本地化,有些则没有。因此,在日志中,我看到了许多消息:

A first chance exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.ni.dll
A first chance exception of type 'System.IO.FileNotFoundException' occurred in MonoGame.Framework.DLL

当然,在开始调试所有调试内容时,

当然,应用程序不起作用,并且应用程序启动很快。检查文件文件夹中是否试图打开文件(titlecontainer.opentream)并捕获异常的唯一方法。因此,我无法避免产生这些例外。我如何加速调试启动以某种方式禁用这种愚蠢的慢速filenotfoundexception处理?

在我的情况下,烦人的例外处理我通过递归预加载文件来解决问题,然后在StringList中搜索:

    private static List<string> mContentFilenames = new List<string>();

    private static void preloadContentFilenamesRecursive(StorageFolder sf)
    {
        var files = sf.GetFilesAsync().AsTask().ConfigureAwait(false).GetAwaiter().GetResult();
        if (files != null)
        {
            foreach (var f in files)
            {
                mContentFilenames.Add(f.Path.Replace('\','/'));
            }
        }
        var folders = sf.GetFoldersAsync().AsTask().ConfigureAwait(false).GetAwaiter().GetResult();
        if (folders != null)
        {
            foreach (var f in folders)
            {
                preloadContentFilenamesRecursive(f);
            }
        }
    }
    private static void preloadContentFilenames()
    {
        if (mContentFilenames.Count > 0)
            return;
        var installed_loc = Windows.ApplicationModel.Package.Current.InstalledLocation;
        var content_folder = installed_loc.GetFolderAsync("Content").AsTask().ConfigureAwait(false).GetAwaiter().GetResult();
        if (content_folder != null)
            preloadContentFilenamesRecursive(content_folder);
    }
    private static bool searchContentFilename(string name)
    {
        var v = from val in mContentFilenames where val.EndsWith(name.Replace('\', '/')) select val;
        return v.Any();
    }

更新

,但仅在附加调试器时才使用此代码。我低估了Microsoft的工人 - 他们很乐意将您的调试变成地狱。他们的la脚错误处理和缺乏ISFileExist函数使您可以递归检查文件以实现ISFileExist而无需自己的例外,但是 - 惊喜 - 如果不附加调试器,此代码使应用程序使App默默地退出任何例外。在应用程序崩溃之前,它检查了随机数量的文件,因此问题不是特定的方法 - 它只是"无法检查很多文件",几个文件会不时变化。

考虑到50%在实际WP8.1设备上启动任何(小或大)应用程序的案件中崩溃的事实,这一事实是如何难以找到root坠机。我花了几乎一天为此!

顺便说一句,经过所有二十年来使用Windows,Windows Store和Windows Phone应用程序,我真的很想见MSFT的某人只是为了看着眼睛。看看这是什么 - 愚蠢或虐待狂?他们真的讨厌我们,开发人员吗?为什么?

最新更新