Xamarin.ios 打开的文件太多
Xamarin.ios too many files open
我们正在使用 Xamarin 和 Mvvmcross 开发应用程序。
简而言之,我们的应用程序制作图片,将它们打包成一个 zip 文件并发送到我们的服务器。 (约15张图片+一些信息文件)
在我们得到 System.IOException 之前一直很好用:打开的文件太多。
这表明我们打开了很多文件,但运气不好,我们找不到打开文件的原因。
我们主要使用常用的 Xamarin 和 Mvvmcross 插件。
对于 save/open/read 文件,我们使用 IMvxFileStore 插件,但即使我们使用 .Net System.IO.File,它也是一样的(抛出异常)。
一些代码:
public virtual Task<bool> SavePhoto(string name, string photoData, bool saveToLibrary = false)
{
return Task.Run(() => {
try
{
var photoPath = GetLocalPath("PHOTOS"+ "/");
if (!_fileStore.FolderExists(photoPath))
_fileStore.EnsureFolderExists(photoPath);
var filename = name;
var filePath = GetLocalPath(filename);
_fileStore.WriteFile(filePath, photoData);
if (saveToLibrary)
{
SavePhotoToLibrary(filePath);
}
return true;
}
catch (Exception ex)
{
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
return false;
}
});
}
有时是 40 张照片,有时是 2 张照片...有趣的是再次重新运行应用程序并没有多大帮助。
debug/release 甚至不同的设备都存在问题。
我们无法找到任何有助于解决此问题的主题。
有没有什么方法可以查看打开了哪些文件以及打开了哪些文件?
应用程序是否处理打开文件或系统?
我 运行 遇到了同样错误的问题,我不得不增加 ulimit。
这可能不是我认为的解决方案,但也许有帮助。默认情况下,OSx 约为 260,但我认为单声道会降低更多。在单声道中它被称为 rlimit。有一本电子书有一些解释:
https://books.google.nl/books?id=FKRL5AOgiC0C&pg=PA170&lpg=PA170&dq=increase+ulimit+ios&source=bl&ots=Ti04k9RdWU&sig=XflYmYDD6UNgWka7VPkp3ZY_AWw&hl=nl&sa=X#v=onepage&q=increase%20ulimit%20ios&f=false
调试注意事项:
我发现我们一次向 api 发出了太多请求,可能它使缓存膨胀并孤立了一些任务。 FileCounter 有助于确定哪些视图会产生泄漏。
我们正在使用 Xamarin 和 Mvvmcross 开发应用程序。
简而言之,我们的应用程序制作图片,将它们打包成一个 zip 文件并发送到我们的服务器。 (约15张图片+一些信息文件)
在我们得到 System.IOException 之前一直很好用:打开的文件太多。
这表明我们打开了很多文件,但运气不好,我们找不到打开文件的原因。
我们主要使用常用的 Xamarin 和 Mvvmcross 插件。
对于 save/open/read 文件,我们使用 IMvxFileStore 插件,但即使我们使用 .Net System.IO.File,它也是一样的(抛出异常)。
一些代码:
public virtual Task<bool> SavePhoto(string name, string photoData, bool saveToLibrary = false)
{
return Task.Run(() => {
try
{
var photoPath = GetLocalPath("PHOTOS"+ "/");
if (!_fileStore.FolderExists(photoPath))
_fileStore.EnsureFolderExists(photoPath);
var filename = name;
var filePath = GetLocalPath(filename);
_fileStore.WriteFile(filePath, photoData);
if (saveToLibrary)
{
SavePhotoToLibrary(filePath);
}
return true;
}
catch (Exception ex)
{
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
return false;
}
});
}
有时是 40 张照片,有时是 2 张照片...有趣的是再次重新运行应用程序并没有多大帮助。 debug/release 甚至不同的设备都存在问题。
我们无法找到任何有助于解决此问题的主题。
有没有什么方法可以查看打开了哪些文件以及打开了哪些文件? 应用程序是否处理打开文件或系统?
我 运行 遇到了同样错误的问题,我不得不增加 ulimit。 这可能不是我认为的解决方案,但也许有帮助。默认情况下,OSx 约为 260,但我认为单声道会降低更多。在单声道中它被称为 rlimit。有一本电子书有一些解释: https://books.google.nl/books?id=FKRL5AOgiC0C&pg=PA170&lpg=PA170&dq=increase+ulimit+ios&source=bl&ots=Ti04k9RdWU&sig=XflYmYDD6UNgWka7VPkp3ZY_AWw&hl=nl&sa=X#v=onepage&q=increase%20ulimit%20ios&f=false
调试注意事项: 我发现我们一次向 api 发出了太多请求,可能它使缓存膨胀并孤立了一些任务。 FileCounter 有助于确定哪些视图会产生泄漏。