VS2015程序运行,提示计算机内存不足

137867312 2015-08-22 09:00:20
编写了一个C#程序,定时向SQL数据库中写入数据,运行三四天后第一次提示计算机内存不足,关掉程序重启程序后出现次数较频繁,错误提示如图。本人用win10系统,内存为8G,请各位大神指点迷津。

...全文
1951 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜鸡进化史 2017-09-11
  • 打赏
  • 举报
回复
季雨林 2016-10-27
  • 打赏
  • 举报
回复
内存泄漏的可能性大,你的程序中可能有某些地方,声明了变量不释放,导致最后某个地方不停地吃内存不干活。干活的地方没内存可用了
nomasp 2015-09-25
  • 打赏
  • 举报
回复
引用 12 楼 bigbaldy 的回复:
[quote=引用 7 楼 u014444640 的回复:] [quote=引用 1 楼 lovelj2012 的回复:] 这肯定和你的代码有关了,你的代码得多吃内存呢
public static void UpdateHisDataBase(int i, string StationNum)
        {
                HisDataSource.Service1Client hisDataSource = new HisDataSource.Service1Client();
                string[] YC = hisDataSource.ReturnYC();

                string DateNow = DateTime.Now.ToString("yyyy-MM-dd");             
                int HourNum = DateTime.Now.Hour;
                int MinNum = DateTime.Now.Minute;
                string ValueId = (HourNum * 12 + MinNum / 5).ToString();
                string IdName = dataSet.Tables["stn01_YC"].Rows[i]["点名"].ToString();   //点名
                int LineId = Convert.ToInt32(dataSet.Tables["stn01_YC"].Rows[i]["ID"].ToString());   //点号
                float HisData = Convert.ToSingle(YC[i]);  //历史数据为服务中那一刻的值
                int HisId = Convert.ToInt32("1" + StationNum) * 10000 + LineId;   //计算出历史库中的点号
                //填入SQL用的SQL语句            
                string UpdateSql = "update [HisData_5min_2015]  set  Value" + "" + ValueId + " =" + HisData + "  where SampleDate = '" + DateNow + "' and Id =  " + HisId + " "; //根据前面的时间判断后赋予相应Value? 的值
                SqlCommand UpdateCmd = new SqlCommand(UpdateSql, conn1);
                UpdateCmd.ExecuteNonQuery();

            }
                   
每5min执行一次上面这个函数[/quote] 能Dispose的一定要Dispose[/quote] 好高端呀
bigbaldy 2015-09-25
  • 打赏
  • 举报
回复
引用 7 楼 u014444640 的回复:
[quote=引用 1 楼 lovelj2012 的回复:] 这肯定和你的代码有关了,你的代码得多吃内存呢
public static void UpdateHisDataBase(int i, string StationNum)
        {
                HisDataSource.Service1Client hisDataSource = new HisDataSource.Service1Client();
                string[] YC = hisDataSource.ReturnYC();

                string DateNow = DateTime.Now.ToString("yyyy-MM-dd");             
                int HourNum = DateTime.Now.Hour;
                int MinNum = DateTime.Now.Minute;
                string ValueId = (HourNum * 12 + MinNum / 5).ToString();
                string IdName = dataSet.Tables["stn01_YC"].Rows[i]["点名"].ToString();   //点名
                int LineId = Convert.ToInt32(dataSet.Tables["stn01_YC"].Rows[i]["ID"].ToString());   //点号
                float HisData = Convert.ToSingle(YC[i]);  //历史数据为服务中那一刻的值
                int HisId = Convert.ToInt32("1" + StationNum) * 10000 + LineId;   //计算出历史库中的点号
                //填入SQL用的SQL语句            
                string UpdateSql = "update [HisData_5min_2015]  set  Value" + "" + ValueId + " =" + HisData + "  where SampleDate = '" + DateNow + "' and Id =  " + HisId + " "; //根据前面的时间判断后赋予相应Value? 的值
                SqlCommand UpdateCmd = new SqlCommand(UpdateSql, conn1);
                UpdateCmd.ExecuteNonQuery();

            }
                   
每5min执行一次上面这个函数[/quote] 能Dispose的一定要Dispose
阿布Guu 2015-09-25
  • 打赏
  • 举报
回复
代码需要优化
qq505666221 2015-09-24
  • 打赏
  • 举报
回复
大神解决了没有,我的也是这个情况 win10 +vs2015 没运行就报错,开了两个vs窗口
ajianchina 2015-08-23
  • 打赏
  • 举报
回复

HisDataSource.Service1Client hisDataSource = new HisDataSource.Service1Client();
SqlCommand UpdateCmd = new SqlCommand(UpdateSql, conn1);
//上面的这两行看好,有三个对象没有被释放掉,hisDataSource,UpdateCmd,conn1,它们都会保存在内存中直到终结器被调用为止。
//hisDataSource这个玩意你看看是个什么东西,不断的new出肯定会造成内存不断增加,你需要将其释放。
//第二行的conn1最好放在内部,像这样:
SqlConnection conn1 = new SqlConnection(connectString);
//所以修改如下:
using(SqlConnection conn1 = new SqlConnection(connectString))
{
	using(SqlCommand UpdateCmd = new SqlCommand(UpdateSql, conn1))
	{
		conn1.Open();
		UpdateCmd.ExecuteNonQuery();
	}
}
//使用using,这样可以确保Dispose()会被运行
devmiao 2015-08-23
  • 打赏
  • 举报
回复
看看是不是有内存泄漏啊。
137867312 2015-08-23
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
没有及时释放资源 内存碎片太多
值得一提的是,偶尔还会报出360浏览器导致内存溢出,这个到底是软件问题还是win10的问题。 另外,程序里该如何清理内存?执行程序在楼上已给,谢谢指导!
137867312 2015-08-23
  • 打赏
  • 举报
回复
引用 1 楼 lovelj2012 的回复:
这肯定和你的代码有关了,你的代码得多吃内存呢
public static void UpdateHisDataBase(int i, string StationNum)
        {
                HisDataSource.Service1Client hisDataSource = new HisDataSource.Service1Client();
                string[] YC = hisDataSource.ReturnYC();

                string DateNow = DateTime.Now.ToString("yyyy-MM-dd");             
                int HourNum = DateTime.Now.Hour;
                int MinNum = DateTime.Now.Minute;
                string ValueId = (HourNum * 12 + MinNum / 5).ToString();
                string IdName = dataSet.Tables["stn01_YC"].Rows[i]["点名"].ToString();   //点名
                int LineId = Convert.ToInt32(dataSet.Tables["stn01_YC"].Rows[i]["ID"].ToString());   //点号
                float HisData = Convert.ToSingle(YC[i]);  //历史数据为服务中那一刻的值
                int HisId = Convert.ToInt32("1" + StationNum) * 10000 + LineId;   //计算出历史库中的点号
                //填入SQL用的SQL语句            
                string UpdateSql = "update [HisData_5min_2015]  set  Value" + "" + ValueId + " =" + HisData + "  where SampleDate = '" + DateNow + "' and Id =  " + HisId + " "; //根据前面的时间判断后赋予相应Value? 的值
                SqlCommand UpdateCmd = new SqlCommand(UpdateSql, conn1);
                UpdateCmd.ExecuteNonQuery();

            }
                   
每5min执行一次上面这个函数
xuzuning 2015-08-23
  • 打赏
  • 举报
回复
没有及时释放资源 内存碎片太多
孤独de猫 2015-08-23
  • 打赏
  • 举报
回复
1) 写的代码有问题,内存泄露 2)计算机的内存太小
Poopaye 2015-08-22
  • 打赏
  • 举报
回复
找个.net的profiler分析下内存
衣舞晨风 2015-08-22
  • 打赏
  • 举报
回复
请帖代码
江南小鱼 2015-08-22
  • 打赏
  • 举报
回复
这肯定和你的代码有关了,你的代码得多吃内存呢

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧