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的某人只是为了看着眼睛。看看这是什么 - 愚蠢或虐待狂?他们真的讨厌我们,开发人员吗?为什么?