当前位置:编程学习 > C#/ASP.NET >>

system.outofmemoryexception怎么解决,在线等

添加视频,经常报错,老是这个情况,怎么解决,IIS7,内存4G --------------------编程问答-------------------- FUCK 没有代码
是不是有些非托管的资源 没有释放 --------------------编程问答--------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Text;

using YDSystem.ZXF.Entity;
using YDSystem.ZXF.BLL;
using YDSystem.ZXF.Common;
using YDSystem.ZXF.Config;
using System.Data;
using System.Diagnostics;

public partial class Manage_Video_AddVideo : YDSystem.ZXF.Page.AdminBase
{
    private string action;  //操作类型
    private int classId;   //分类的id
    protected int videoId;  //当前修改的视频id
    protected string titlePicUrl;   //标题图片url
    public string titlePicUrl2;   //标题图片url
    protected string scrollPicUrl;  //滚动图片url
    protected int sourceType = 1;  //文件类型 0-本地上传 1-从服务器选择或链接
    protected bool isScroll = false;    //是否为首页滚动


    protected void Page_Load(object sender, EventArgs e)
    {
        //获取URL参数
        action = Utils.GetRequest("action");
        classId = Utils.GetIntRequest("cid");
        videoId = Utils.GetIntRequest("vid");


        //首次加载
        if (!this.IsPostBack)
        {
            this.InitPage();
        }
        else
        {
            //设定下拉框中频道分类的css
            this.SetChannelCss();
        }
    }

    //绑定下拉列表
    protected void BindDropdown()
    {
        IList<int> indexs = VideoBinder.BindDropdownClass(ddlColumns);
        //保存到ViewState中
        ViewState["firstIndexes"] = indexs;

        //添加“全部分类”项
        ddlColumns.Items.Insert(0, new ListItem("[--请选择分类--]", "0"));
    }

    //设定频道分类的css样式,方便管理员区分不同的分类
    private void SetChannelCss()
    {
        if (ViewState["firstIndexes"] == null)
        {
            return;
        }

        IList<int> indexs = (IList<int>)ViewState["firstIndexes"];
        //设定一级分类的样式,方便查看
        foreach (int index in indexs)
        {
            ddlColumns.Items[index + 1].Attributes.CssStyle["background-color"] = "#48A6E6";
            ddlColumns.Items[index + 1].Attributes.CssStyle["font-weight"] = "bold";
        }
    }

    //初始化页面
    protected void InitPage()
    {
        if (action == "add")    //添加模式
        {
            lTitle.Text = "添加电影";
            btnSubmit.Text = "添加后继续添加";
        }
        else if (action == "edit")   //修改模式
        {
            lTitle.Text = "修改电影";
            btnSubmit.Text = "修 改";
            btnAddAndBack.Visible = false;
        }

        //暂无图片
        titlePicUrl = "/manage/images/nopic_01.gif";
        titlePicUrl2 = "/manage/images/nopic_01.gif";
        scrollPicUrl = "/manage/images/nopic_01.gif";

        //类别
        CheckBoxType.DataSource = YDSystem.ZXF.SQLServerDAL.AmusementTypeDAL.GetList("a.MName,b.Id,b.Tname", "");
        CheckBoxType.DataBind();

        //年份
        DataTable dt= YDSystem.ZXF.SQLServerDAL.Year.GetList("");
        for (int i = 0; i < dt.Rows.Count;i++ )
        {
            ListItem item = new ListItem();
            item.Text = dt.Rows[i]["Yname"].ToString();
            item.Value = dt.Rows[i]["id"].ToString();
            Year.Items.Add(item);
        }

        //地区
        dt= YDSystem.ZXF.SQLServerDAL.Area.GetList("a.MName,b.Id,b.Aname", "");
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            ListItem item = new ListItem();
            item.Text = dt.Rows[i]["Aname"].ToString();
            item.Value = dt.Rows[i]["id"].ToString();
            Area.Items.Add(item);
        }

        //类别
        dt= YDSystem.ZXF.SQLServerDAL.Class.GetList("");
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            ListItem item = new ListItem();
            item.Text = dt.Rows[i]["Cname"].ToString();
            item.Value = dt.Rows[i]["id"].ToString();
            Class.Items.Add(item);
        }
        

        //绑定分类列表
        //this.BindDropdown();

        if (action == "add")    //添加模式
        {
            //选定视频分类
            if (classId > 0) //添加指定分类的视频
            {
                ddlColumns.SelectedIndex = ddlColumns.Items.IndexOf(ddlColumns.Items.FindByValue(classId.ToString()));
            }
            else
            {
                ddlColumns.SelectedIndex = 0;
            }
        }
        else if (action == "edit")   //修改模式
        {
            //从数据库中读取该视频
            Video video = new VideoBLL().GetItemById(videoId);

            if (video == null)
            {
                Utils.ShowAdminError("该视频不存在");
            }

            //初始化各控件
            ddlColumns.SelectedIndex = ddlColumns.Items.IndexOf(ddlColumns.Items.FindByValue(video.ClassId.ToString()));

            //标题
            txtTitle.Text = video.Title;

            //类型
            foreach (RepeaterItem item in CheckBoxType.Items)
            {
                CheckBox chProTypeEx = (CheckBox)item.FindControl("CheckBox");
                if (video.TypeIds.IndexOf(chProTypeEx.Text)!=-1)
                {
                    chProTypeEx.Checked = true;
                }
            }
            //年份
           foreach(ListItem item in this.Year.Items)
           {
               if (video.Year.IndexOf(item.Text)!=-1)
               {
                   item.Selected = true;
                   break;
               }
           }
           //地区
           foreach (ListItem item in this.Area.Items)
           {
               if (video.Area.IndexOf(item.Text) != -1)
               {
                   item.Selected = true;
                   break;
               }
           }
            //类别
           foreach (ListItem item in this.Class.Items)
           {
               if (video.Class.IndexOf(item.Text) != -1)
               {
                   item.Selected = true;
                   break;
               }
           }

           //演员
           Actor_text.Text = video.Actor;
          
            //导演
           this.Text_Director.Text = video.Director;
            
            //简介
            txtIntro.Text = video.Intro;

            //文件来源类型
            sourceType = video.SourceType;
            if (sourceType == 0)    //本地上传
            {
                if (video.VideoPath == string.Empty)
                {
                    lVideoFile.Text = "暂无视频";
                }
                else
                {
                    lVideoFile.Text = MakeLink(video.VideoPath,"查看该视频");
                }
            }
            else if (sourceType == 1)   //链接
            {
                if (video.VideoPath == string.Empty)
                {
                    lVideoUrl.Text = "暂无视频";
                }
                else
                {
                    lVideoUrl.Text = MakeLink(video.VideoPath,"查看该视频");
                }
            }

            //标题图片
            if (video.TitlePic != string.Empty)
            {
                titlePicUrl2 = video.TitlePic;
            }
            if (video.TitlePicW != string.Empty)
            {
                titlePicUrl = video.TitlePicW;
            }

            //首页滚动
            if (video.ScrollPic != string.Empty)    //首页滚动
            {
                isScroll = true;
                rblScroll.SelectedIndex = 0;

                scrollPicUrl = video.ScrollPic;
            }
            else    //非首页滚动
            {
                isScroll = false;
                rblScroll.SelectedIndex = 1;
            }

            //推荐
            rblRecommanded.SelectedIndex = video.IsRecommanded ? 0 : 1;

            //隐藏
            rblHidden.SelectedIndex = video.IsHidden ? 0 : 1;

            //标签
            txtTags.Text = Utils.TrimComma(video.Tags);

            //关键字
            txtKeywords.Text = Utils.TrimComma(video.Keywords);

            //搜索关键字
            video.MetaKeywords = txtMetaKeywords.Text.Trim();
            if (txtMetaKeywords.Text.Trim() == "")
            {
                video.MetaKeywords = video.Title;
            }

            //搜索描述
            video.MetaDescription = txtMetaDescription.Text.Trim();
            if (txtMetaDescription.Text.Trim() == "")
            {
                video.MetaKeywords = txtIntro.Text.Trim();
            }

            //播放次数
            txtHits.Text = video.Hits.ToString();

            //下载次数
            txtDownloads.Text = video.Downloads.ToString();
        }

        //显示标题图片
        imgTitlePic.ImageUrl = titlePicUrl;
        imgTitlePic2.ImageUrl = titlePicUrl2;
        imgScrollPic.ImageUrl = scrollPicUrl;
    }

    //保存数据
    protected void SaveData(bool back)
    {
        if (!this.IsValid)  //未通过验证
        {
            return;
        }

        //标题
        string title = txtTitle.Text.Trim();

        //所属分类
        int classId=-1 ;

        Video video = null; //视频实例
        VideoBLL bll = new VideoBLL();

        if (action == "add")
        {
            if (!VideoConfig.IsSameTitleAllowed && bll.Exists(title)) //不允许重名
            {
                ShowMessage(lblMsg, -450);
                return;
            }

            //创建新实例
            video = new Video();
        }
        else if (action == "edit")
        {
            if (!VideoConfig.IsSameTitleAllowed && bll.ExistsWhere(string.Format("Title='{0}' AND [Id]<>{1}", Utils.EscapeSqlValue(title), videoId))) //不允许重名
            {
                ShowMessage(lblMsg, -451);
                return;
            }

            //从数据库获取该视频
            video = bll.GetItemById(videoId);
            if (video == null)
            {
                Utils.ShowAdminError("该视频不存在或已被删除");
            }
        }



--------------------编程问答--------------------

        //分类
        video.ClassId = classId;

        //标题
        video.Title = title;

        //简介
        video.Intro = txtIntro.Text;

        //类型
        video.TypeIds = "";
        foreach (RepeaterItem item in CheckBoxType.Items)
        {
            CheckBox chProTypeEx = (CheckBox)item.FindControl("CheckBox");
            if (chProTypeEx.Checked == true)
            {
                video.TypeIds += chProTypeEx.Text + ",";
            }
        }
        video.TypeIds = Utils.TrimComma(video.TypeIds);
        //年份
        video.Year = this.Year.SelectedItem.Text;
        //地区
        video.Area =   this.Area.SelectedItem.Text ;
        //类别
        video.Class =   this.Class.SelectedItem.Text ;
        //演员
        video.Actor = this.Actor_text.Text.Trim();
        //导演
        video.Director = this.Text_Director.Text.Trim();
        //类型电影
        video.MediaType = 0;
        //文件来源类型
        int sourceType = Convert.ToInt32(rblSourceType.SelectedValue);
        if (sourceType == 0)    //本地上传
        {
            //保存视频文件
            if (fileVideo.HasFile)
            {
                //原文件大小
                int fileSize = fileVideo.PostedFile.ContentLength;

                //扩展名 带“.”
                string extension = Path.GetExtension(fileVideo.FileName).ToLower();

                //相对保存路径
                string filePath = GlobalConfigManage.GetUploadFileFullName(extension);

                //保存
                fileVideo.SaveAs(Server.MapPath(filePath));

                //把上传文件的路径和大小信息写入实例中
                video.VideoPath = filePath;
                video.VideoSize = fileSize;
            }
            
        }
        else    //链接
        {
            if (txtVideoPath.Text.Trim()!="")
            {
                video.VideoPath = txtVideoPath.Text.Trim();
            }
        }
        video.SourceType = sourceType;

        //推荐
        video.IsRecommanded = Convert.ToBoolean(rblRecommanded.SelectedValue);

        //隐藏
        video.IsHidden = Convert.ToBoolean(rblHidden.SelectedValue);

        //标签
        video.Tags = Utils.AddComma(txtTags.Text);

        //关键字
        video.Keywords = Utils.AddComma(txtKeywords.Text);

        //搜索关键字
        video.MetaKeywords = txtMetaKeywords.Text.Trim();
        if (txtMetaKeywords.Text.Trim() == "")
        {
            video.MetaKeywords = title;
        }

        //搜索描述
        video.MetaDescription = txtMetaDescription.Text.Trim();
        if (txtMetaDescription.Text.Trim() == "")
        {
            video.MetaDescription = txtIntro.Text.Trim();
        }

        //播放次数
        int hits;
        int.TryParse(txtHits.Text.Trim(), out hits);
        
        video.Hits = hits;

        //下载次数
        int downloads;
        int.TryParse(txtDownloads.Text.Trim(), out downloads);
        video.Downloads = downloads;

        VideoConfig config = VideoConfig.GetConfig();

        System.Drawing.Image image = null;
        //缩略图片
        if (fileTitlePic.HasFile)
        {
            //验证图片格式
            if (!Utils.IsImageFormat(Path.GetExtension(fileTitlePic.FileName)))
            {
                ShowMessage(lblMsg,-902);
                return;
            }

            //创建Image对象
            image = System.Drawing.Image.FromStream(fileTitlePic.FileContent);

            //完全文件名
            string fileName = VideoConfig.GetUploadImageFileName();

            bool result = YDSystem.ZXF.Common.Configurable.ImageWorker.MakeThumbnail(image, Server.MapPath(fileName), 160, 90);

            if (result) //生成缩略图成功
            {
                //保存之前的标题图片
                string formerTitlePic = video.TitlePicW;
                
                //更新此次的缩略图片到实例中
                video.TitlePicW = fileName;

                //显示图片
               // titlePicUrl = fileName;

                if (action == "edit" && formerTitlePic != string.Empty) //编辑模式下上传了标题图片,需要删除之前的图片
                {
                    formerTitlePic = Server.MapPath(formerTitlePic);
                    if (File.Exists(formerTitlePic))
                    {
                        try
                        {
                            File.Delete(formerTitlePic);
                        }
                        catch(Exception ex)
                        {
                            ErrorHandler.WriteError(ex);
                        }
                    }
                }
            }
            else
            {
                Utils.Alert("图片过小,生成失败 160x90以上");
                return;
            }
        }
        else
        {
            if (video.TitlePicW=="")
            {
                Utils.Alert("请选择标题图片");
                return;
            }
        }
        //
        if (fileTitlePic2.HasFile)
        {
            //验证图片格式
            if (!Utils.IsImageFormat(Path.GetExtension(fileTitlePic2.FileName)))
            {
                ShowMessage(lblMsg, -902);
                return;
            }

            //创建Image对象
            image = System.Drawing.Image.FromStream(fileTitlePic2.FileContent);

            //完全文件名
            string fileName = VideoConfig.GetUploadImageFileName();

            bool result = YDSystem.ZXF.Common.Configurable.ImageWorker.MakeThumbnail(image, Server.MapPath(fileName), 250, 280);

            if (result) //生成缩略图成功
            {
                //保存之前的标题图片
                string formerTitlePic = video.TitlePic;

                //更新此次的标题图片到实例中
                video.TitlePic = fileName;

                //显示图片
                titlePicUrl = fileName;
                //imgTitlePic.ImageUrl = fileName;

                if (action == "edit" && formerTitlePic != string.Empty) //编辑模式下上传了标题图片,需要删除之前的图片
                {
                    formerTitlePic = Server.MapPath(formerTitlePic);
                    if (File.Exists(formerTitlePic))
                    {
                        try
                        {
                            File.Delete(formerTitlePic);
                        }
                        catch (Exception ex)
                        {
                            ErrorHandler.WriteError(ex);
                        }
                    }
                }
            }
            else
            {
                Utils.Alert("图片过小生成失败 250x280以上");
                return;
            }
        }
        else
        {
            if (video.TitlePic == "")
            {
               Utils.Alert("请选择标题图片");
               return;
            }
        }


--------------------编程问答--------------------

        //if (this.fileVideo.HasFile)
        //{
        //    string upFileName = "";
        //    string saveName = DateTime.Now.ToString("yyyyMMddHHmmssffff");
        //    upFileName = Server.MapPath("/resource/upload/media/" + saveName+fileVideo.FileName);
        //    this.fileVideo.SaveAs(upFileName);
            
        //    string playFile = Server.MapPath("/resource/upload/media/" + saveName + ".flv");
        //    string imgFile = Server.MapPath("/resource/upload/media/" + saveName + ".jpg");

        //    string ffmpeg = Server.MapPath("/resource/upload/media/ffmpeg.exe");
        //    Process p = new Process();//建立外部调用线程   
        //    p.StartInfo.FileName = ffmpeg;//要调用外部程序的绝对路径   
        //    //p.StartInfo.Arguments = " -y -i " + upFileName + " -ab 56k -ar 22050 -b 500k -r 15 -s 240x240 " + playFile; ;//参数(这里就是FFMPEG的参数了)   
        //    p.StartInfo.Arguments = " -y -i " + upFileName + " -y -f image2 -ss 60 -t 0.001 -s 480x480 " + playFile;
        //    p.StartInfo.UseShellExecute = false;//不使用操作系统外壳程序启动线程(一定为FALSE,详细的请看MSDN)   
        //    p.StartInfo.RedirectStandardError = true;//把外部程序错误输出写到StandardError流中(这个一定要注意,FFMPEG的所有输出信息,都为错误输出流,用StandardOutput是捕获不到任何消息的...这是我耗费了2个多月得出来的经验...mencoder就是用standardOutput来捕获的)   
        //    p.StartInfo.CreateNoWindow = false;//不创建进程窗口   
        //    //p.ErrorDataReceived += new DataReceivedEventHandler(Output);//外部程序(这里是FFMPEG)输出流时候产生的事件,这里是把流的处理过程转移到下面的方法中,详细请查阅MSDN   
        //    p.Start();//启动线程   
        //    p.BeginErrorReadLine();//开始异步读取   
        //    p.WaitForExit();//阻塞等待进程结束   
        //    p.Close();//关闭进程   
        //    p.Dispose();//释放资源 

        //    p = new Process();
        //    p.StartInfo.FileName = ffmpeg;//要调用外部程序的绝对路径   
        //    p.StartInfo.Arguments = " -i " + upFileName + " -y -f image2 -ss 60 -t 0.001 -s 120*120 " + imgFile;
        //    p.StartInfo.UseShellExecute = false;//不使用操作系统外壳程序启动线程(一定为FALSE,详细的请看MSDN)   
        //    p.StartInfo.RedirectStandardError = true;//把外部程序错误输出写到StandardError流中(这个一定要注意,FFMPEG的所有输出信息,都为错误输出流,用StandardOutput是捕获不到任何消息的...这是我耗费了2个多月得出来的经验...mencoder就是用standardOutput来捕获的)   
        //    p.StartInfo.CreateNoWindow = false;//不创建进程窗口 
        //    p.Start();//启动线程   
        //    p.BeginErrorReadLine();//开始异步读取   
        //    p.WaitForExit();//阻塞等待进程结束   
        //    p.Close();//关闭进程   
        //    p.Dispose();//释放资源

        //    //Session["file"] = fileName;

             

        //      string PicName =Server.MapPath(Guid.NewGuid().ToString().Replace("-","")+".jpg");

        //      System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg);

        //      startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;

        //      startInfo.Arguments = " -i " + Server.MapPath("/resource/upload/media/" + saveName + fileVideo.FileName) + " -y -f image2 -ss " + 10 + " -t 0.001 -s 240*180" + PicName;

        //     System.Diagnostics.Process.Start(startInfo);
        //}

        //滚动图片
        if (rblScroll.SelectedValue == "1")
        {
            //是滚动图片
            isScroll = true;
        }
        else
        {
            isScroll = false;
        }

        bool scrollResult = false;
        string scrollFileName = VideoConfig.GetUploadImageFileName();

        if (rblScroll.SelectedValue == "1" && cbxUseTitlePic.Checked == true && image != null)  //首页滚动、与标题图片相同且标题图片不为空
        {
            scrollResult = YDSystem.ZXF.Common.Configurable.ImageWorker.MakeThumbnail(image, Server.MapPath(scrollFileName), 950, 370);
        }
        else if (fileScrollPic.HasFile) //手动选择了滚动图片
        {
            //验证图片格式
            if (!Utils.IsImageFormat(Path.GetExtension(fileScrollPic.FileName)))
            {
                ShowMessage(lblMsg, -902);

                //释放对象
                if (image != null)
                {
                    image.Dispose();
                }
                return;
            }

            image = System.Drawing.Image.FromStream(fileScrollPic.FileContent);

            //生成缩略图
            scrollResult = YDSystem.ZXF.Common.Configurable.ImageWorker.MakeThumbnail(image, Server.MapPath(scrollFileName), 950, 370);
        }

        if (scrollResult)   //生成滚动图片成功
        {
            string formerScrollPic = video.ScrollPic;

            //保存到实例中并显示
            video.ScrollPic = scrollFileName;
            scrollPicUrl = scrollFileName;
            imgScrollPic.ImageUrl = scrollFileName;

            if (action == "edit" && formerScrollPic != string.Empty)
            { 
                //删除之前的滚动图片
                try
                {
                    File.Delete(Server.MapPath(formerScrollPic));
                }
                catch(Exception ex)
                {
                    ErrorHandler.WriteError(ex);
                }
            }
        }

        //释放对象
        if (image != null)
        {
            image.Dispose();
        }

        int lastResult = 0;
        if (action == "add")
        { 
            //添加者和最后修改者
            video.AddAdmin = video.ModifiedAdmin = MasterBLL.LoggedMasterName;

            lastResult = bll.Add(video);

            if (lastResult > 0) //添加成功
            {
                if (back)   //跳转到之前的页面
                {
                    GoBack("ManageVideo.aspx", lastResult);
                }

                foreach (Control control in form1.Controls)
                {
                    if (control is TextBox)
                    {
                        ((TextBox)control).Text = "";
                    }
                }
            }
        }
        else if (action == "edit")
        { 
            //最后修改者
            video.ModifiedAdmin = MasterBLL.LoggedMasterName;

            lastResult = bll.Update(video);

            if (lastResult > 0)
            {
                GoBack("ManageVideo.aspx", lastResult);
            }
        }

        //显示操作结果
        ShowMessage(lblMsg,lastResult);
    }

    //保存
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        //保存
        SaveData(false);
    }

    //保存后返回
    protected void Button1_Click(object sender, EventArgs e)
    {
        SaveData(true);
    }
--------------------编程问答-------------------- 你也没说程序里做了什么操作呀
IIS有默认的请求超时、程序池也有内存及CPU的限额设置== --------------------编程问答-------------------- 应该不是代码问题吧,该关闭的都关了,以前是用的FCK插件添加视频,现在直接用的上传控件 --------------------编程问答-------------------- 请求超时120S --------------------编程问答-------------------- 上传大小3G,超时120S  还要修改什么, --------------------编程问答-------------------- 如果你硬要用http上传,需要修改配置文件里最大上传限制
以及Server.ScriptTimeout = 600;
默认是90秒,设定的时间内没有上传完毕请求将超时,上传失败,这段时间的连接对服务端而言是一种累赘
如果文件过大,建议用ftp并且断点续传
--------------------编程问答-------------------- 上传是文件不是太大,100M。配置也改了,还是会出现错误, --------------------编程问答-------------------- 你有监控服务端的负荷吗,比如内存、CPU、出错次数==
假如有好几个人同时在上传呢? --------------------编程问答--------------------
期待一下,没接触过视频的
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,