内存溢出的问题

sidney_he 2008-11-19 05:09:38
C# form窗体里加个定时器 执行一句 “time = DateTime.Now.ToLongTimeString();”(time为成员属性)
随着运行 windows任务管理器里的内存占用量一直上升
怎么才能控制内存占用量呢?
...全文
151 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
如果单纯是这样,不可能会出现内存泄漏的问题。timer很多人在用,没有人说它会内存泄漏,一个对变量赋值也是最基本的,Now的ToLongTimeString是不可能有内存泄漏的,肯定是与之相关的其他地方导致的,
把怎么启用timer,timer运行的代码都贴一下呗,哪怕把你那个form的代码全贴出来都行啊,断章取义的估计帮不上你了。呵呵
sidney_he 2008-11-21
  • 打赏
  • 举报
回复
tmxk2002 :
你给的代码太少,不要你想着认为这里就给这里。如果你开了多线程,很有可能导致内存泄漏问题。
特别是把线程压到系统线程池里的操作。

帖子内已经举例说明了
C# form窗体里加个定时器 执行一句 “time = DateTime.Now.ToLongTimeString();”(time为成员属性)
随着运行 windows任务管理器里的内存占用量一直上升
怎么才能控制内存占用量呢?

先把这个解决了吧
shanying_0 2008-11-20
  • 打赏
  • 举报
回复
你把线成也关掉。看看内存还张的快么?最好观察几分钟。看看内存有回落么。因为gc要回收内存。
你要确定问题出在那一块在找解决的方法!
sidney_he 2008-11-20
  • 打赏
  • 举报
回复
我自己分析的lastState和currenState这两个变量始终在赋值 而且c#里 对于string类型 也是引用
每次 = 操作 就是new了一个string 但是老的string 没有释放

这个是我自己的看法,还请高手多多指教
LorenLiu 2008-11-20
  • 打赏
  • 举报
回复
如果其它地方都没问题的话,只能解释为每次 DateTime.Now.ToLongTimeString();调用时都生成了一个String对象,不同值的String对象要占用不同的内存空间。所以内存就会一直往上涨

但是我自己不大认为是这个原因,应该还是别的地方出了什么问题
sidney_he 2008-11-20
  • 打赏
  • 举报
回复
State_Change(); 被我注释掉了 还是同样的情况
不是那的问题
  • 打赏
  • 举报
回复
State_Change里干了什么?
然后你这些变量会每次执行完后释放掉不?
sidney_he 2008-11-20
  • 打赏
  • 举报
回复
就这点东西 没有什么隐藏的 只是没有前面那个例子容易说明 放在线程里执行的 中间thread.sleep(50);
currenState = GetState(ID);
if (currenState != lastState)
{
State_Change();
}
lastState = currenState;


//简单说明一下就是监听一个状态改变
  • 打赏
  • 举报
回复
一个什么状态信息能导致内存暴涨呢?难道是维护客户的状态信息?然后客户的量已经达到内存都爆掉了?
贴你的代码把,肯定是你某个地方有逻辑错误。
怕别人知道你的代码实现吗?如果你到代码非常好有价值,也不会出现这么严重的错误了。呵呵,这个论坛上技术高手很多,就不要藏着你那点实现了。
sidney_he 2008-11-20
  • 打赏
  • 举报
回复
lorenliu:
这个内存的占用量会很大吗?我假设你的那句代码是在timer的tick时执行,自己做了个例子,也就大概10秒钟左右上涨几K而已啊

这个只是一个线程 而且是个服务程序 要求长时间启动的

-------------------------------------------------------------------------------------------
tmxk2002:
贴你的代码,估计又是作死的往静态变量里塞东西,然后不去释放。
再大的内存都会爆掉。

是个状态信息 始终需要更新 这个变量下次使用时还要用 怎么释放呢
--------------------------------------------------------------------------------------------
sckoo:
内存溢出 只有个原因 就是间隔时间太短 重复做一件事
最好不要在timer事件里面不断实例化对象
timer事件里无休止执行的时候 间隔不要太短

我本来是在一个线程里做的 用的是Thread.sleep 做的间隔 但是本身要求实时性强 间隔短
  • 打赏
  • 举报
回复
你给的代码太少,不要你想着认为这里就给这里。如果你开了多线程,很有可能导致内存泄漏问题。
特别是把线程压到系统线程池里的操作。
niitnanfeng 2008-11-20
  • 打赏
  • 举报
回复
哈哈,不会是中招了吧。
net5i 2008-11-19
  • 打赏
  • 举报
回复
应该不是这句的问题
James_gaojun 2008-11-19
  • 打赏
  • 举报
回复
对的,看了你的代码才知道原因的
WuZongBo 2008-11-19
  • 打赏
  • 举报
回复
内存溢出 只有个原因 就是间隔时间太短 重复做一件事

最好不要在timer事件里面不断实例化对象

timer事件里无休止执行的时候 间隔不要太短
cheng_er 2008-11-19
  • 打赏
  • 举报
回复
就是,看代码吧
  • 打赏
  • 举报
回复
贴你的代码,估计又是作死的往静态变量里塞东西,然后不去释放。
再大的内存都会爆掉。
LorenLiu 2008-11-19
  • 打赏
  • 举报
回复
这个内存的占用量会很大吗?我假设你的那句代码是在timer的tick时执行,自己做了个例子,也就大概10秒钟左右上涨几K而已啊

111,130

社区成员

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

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

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