.net – 移动设备上的OutOfMemoryException
发布时间:2020-12-14 05:51:30  所属栏目:Windows  来源:网络整理 
            导读:我正在开发一个使用移动设备拍摄照片并使用网络服务发送的应用程序.但是在我拍了4张照片之后,我在下面的代码中得到了一个OutOfMemoryException.我试过调用GC.Collect()但它也没有帮助.也许这里有人可以给我一个如何处理这个问题的建议. public static Bitmap
                
                
                
            | 
 我正在开发一个使用移动设备拍摄照片并使用网络服务发送的应用程序.但是在我拍了4张照片之后,我在下面的代码中得到了一个OutOfMemoryException.我试过调用GC.Collect()但它也没有帮助.也许这里有人可以给我一个如何处理这个问题的建议. 
  
  
  public static Bitmap TakePicture()
{
    var dialog = new CameraCaptureDialog
    {
        Resolution = new Size(1600,1200),StillQuality = CameraCaptureStillQuality.Default
    };
    dialog.ShowDialog();
    // If the filename is empty the user took no picture
    if (string.IsNullOrEmpty(dialog.FileName))
       return null;
    // (!) The OutOfMemoryException is thrown here (!)
    var bitmap = new Bitmap(dialog.FileName);
    File.Delete(dialog.FileName);
    return bitmap;
}该函数由事件处理程序调用: private void _pictureBox_Click(object sender,EventArgs e)
{
    _takePictureLinkLabel.Visible = false;
    var image = Camera.TakePicture();
    if (image == null)
       return;
    image = Camera.CutBitmap(image,2.5);
    _pictureBox.Image = image;
    _image = Camera.ImageToByteArray(image);
}解决方法
 我怀疑你正在坚持参考.作为次要原因,请注意在使用ShowDialog时对话框不会自行处理,因此您应该使用对话框(尽管我希望GC仍然可以收集一个未曝光但未引用的对话框). 
  
  同样地,你可能应该使用图像,但是再次:不确定我是否期望这是成败;值得一试,但…… public static Bitmap TakePicture()
{
    string filename;
    using(var dialog = new CameraCaptureDialog
    {
        Resolution = new Size(1600,StillQuality = CameraCaptureStillQuality.Default
    }) {
        dialog.ShowDialog();
        filename = dialog.FileName;
    }    
    // If the filename is empty the user took no picture
    if (string.IsNullOrEmpty(filename))
       return null;
    // (!) The OutOfMemoryException is thrown here (!)
    var bitmap = new Bitmap(filename);
    File.Delete(filename);
    return bitmap;
}
private void _pictureBox_Click(object sender,EventArgs e)
{
    _takePictureLinkLabel.Visible = false;
    using(var image = Camera.TakePicture()) {
        if (image == null)
           return;
        image = Camera.CutBitmap(image,2.5);
        _pictureBox.Image = image;
        _image = Camera.ImageToByteArray(image);
    }
}我也会对CutBitmap等有点谨慎,以确保尽快发布. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 
相关内容
- .net – 将基于ECC的证书从Windows证书存储导入CngKey
- windows-server-2008 – Windows文件服务器能够有效使用多少
- windows – 从Oracle中指定用户杀死所有会话的最快方法是什
- windows – 如何防止资源管理器在信息亭设置中作为shell启动
- .net – Windows XP的Windows Identity框架
- windows – 寻找在IIS发生故障时监视/通知的方法
- windows – 计算机启动/启动时的事件日志时间
- 如何在Windows Azure上重置VM上的管理员密码?
- windows – 你怎么知道w3wp.exe在做什么? (或如何诊断性能
- windows – 创建新进程后是否需要使用CloseHandle?
推荐文章
            站长推荐
            - 自动部署Windows服务 – 工具
- Windows Mobile中的非闭合关闭按钮(使用Qt开发)
- windows-phone-8 – Windows Phone 8中的Google地
- saltstack在windows客户端远程执行脚本提示路径不
- windows – Microsoft-HTTPAPI / 2.0使用的端口8
- windows-server-2003 – 如何使用脚本远程重启Wi
- windows-xp – 如何在多台Windows XP计算机上远程
- windows – Java日历问题,JDK 1.6.0.22
- windows-phone-7 – 如何在wp7中获得scrollview的
- windows – 如何以Bamboo的管理员身份运行批处理
热点阅读
            