ASP.NET(C#)写了一个采集类 GetItem ,采用静态方法采集网页信息然后入库,另有两个Web窗体Default.aspx和Caiji.aspx,现在Default.aspx.cs保持默认(空白网页),在Caiji.aspx.cs中调用采集类如下:
protected void Page_Load ( object sender , EventArgs e )
{
GetItem.Caiji ( ); //采集信息并入库
GC.Collect ( ); //启动垃圾收集器
}
现在情况是这样的:
IIS启动后在任务管理器显示aspnet_wp.exe进程内存使用为3,432K;
将程序发布到本地IIS然后打开空白网页Default.aspx任务管理器显示aspnet_wp.exe进程内存使用为23,472K;
后打开采集网页Caiji.aspx任务管理器显示aspnet_wp.exe进程内存使用为108,245K;
刷新Caiji.aspx 显示 aspnet_wp.exe进程内存使用为109,342K;
刷新Caiji.aspx 显示 aspnet_wp.exe进程内存使用为110,022K;
刷新Caiji.aspx 显示 aspnet_wp.exe进程内存使用为108,682K;………………多次刷新该网页后 aspnet_wp.exe进程内存使用一直在108,000K -- 112,000K之间。关闭所有打开的网页后aspnet_wp.exe进程内存使用不见降低仍然保持在108M以上。现在我有一些问题非常困惑:
1、我想实现关闭网页后内存占用降低至打开空白网页状态是(大概23M左右),这样有可能吗,该如何实现?
2、GC.Collect ( )垃圾收集器调用好像没有多大作用,是不是调用时机(位置)不对。应该怎样调用?
protected void Page_Load ( object sender , EventArgs e )
{
GetItem.Caiji ( ); //采集信息并入库
GC.Collect ( ); //启动垃圾收集器
}
现在情况是这样的:
IIS启动后在任务管理器显示aspnet_wp.exe进程内存使用为3,432K;
将程序发布到本地IIS然后打开空白网页Default.aspx任务管理器显示aspnet_wp.exe进程内存使用为23,472K;
后打开采集网页Caiji.aspx任务管理器显示aspnet_wp.exe进程内存使用为108,245K;
刷新Caiji.aspx 显示 aspnet_wp.exe进程内存使用为109,342K;
刷新Caiji.aspx 显示 aspnet_wp.exe进程内存使用为110,022K;
刷新Caiji.aspx 显示 aspnet_wp.exe进程内存使用为108,682K;………………多次刷新该网页后 aspnet_wp.exe进程内存使用一直在108,000K -- 112,000K之间。关闭所有打开的网页后aspnet_wp.exe进程内存使用不见降低仍然保持在108M以上。现在我有一些问题非常困惑:
1、我想实现关闭网页后内存占用降低至打开空白网页状态是(大概23M左右),这样有可能吗,该如何实现?
2、GC.Collect ( )垃圾收集器调用好像没有多大作用,是不是调用时机(位置)不对。应该怎样调用?
解决方案 »
- Process[] ps = Process.GetProcessesByName
- linq基础问题
- not all code paths return a value,诚心提问
- c#如何通过Microsotf.JScript来解析JS里的内容?
- 如何让应用程序既可以编译成windows应用程序又可以编译成控制台应用程序?
- 如何显示n个"."?
- 如何获取ControlTemplate中的控件?
- 请帮忙:问题两则,能回答任何一则均有分!!!!!!!!!
- 大家可去化境编程界有Inside C#下载!
- C#如何使用循环抓取一个html页面的数据。在线等
- BeginInvoke & serialport 问题
- 连接数据库的语句应该放在那里
try
{
GC.Collect();
GC.SuppressFinalize(this); if (Environment.OSVersion.Platform == PlatformID.Win32NT)
{
SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
}
}
catch { }
[System.Runtime.InteropServices.DllImportAttribute("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize", ExactSpelling = true, CharSet =
System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
private static extern int SetProcessWorkingSetSize(IntPtr process, int minimumWorkingSetSize, int maximumWorkingSetSize);
用这个去定时释放资源。