用C#写的销售软件,数据库用SQL SERVER 2005 Express,数据库文件的AutoClose设为False.
运行系统:Windows XP sp2程序在第一次启动的时候,需要很长一段时间加载(大约七八秒吧)。
在平时使用中,如果间隔了很长一段时间(没有具体记录多长时间,大概一两个小时吧)都没有使用该软件(成为非当前活动程序)。在任务栏点击该程序,让其成为当前活动程序的时候。程序就好像第一次启动的那样,在加载某些东西,好几秒钟后才恢复正常使用状态。而同机器的另外一个销售软件没有这样的问题。如何解决这个实际而又迫切的问题?(ps.机器上没有设置屏保程序)

解决方案 »

  1.   

    to 程序在第一次启动的时候,需要很长一段时间加载(大约七八秒吧)启动的时候需要连接数据库吧,如果是的话,是要慢一些,可以增加一个splash窗体来缓解这种尴尬现象。
      

  2.   

    to 如果间隔了很长一段时间(没有具体记录多长时间,大概一两个小时吧)都没有使用该软件(成为非当前活动程序)。在任务栏点击该程序,让其成为当前活动程序的时候。程序就好像第一次启动的那样,在加载某些东西,好几秒钟后才恢复正常使用状态。connection在一段时间不用后,就变成无效,需要重新建立连接。这个时间好像是半个小时。
      

  3.   

    这应该是自动垃圾回收GC的结果,没办法!就连VS.IDE 也是这样.
      

  4.   

    这个不是gc回收的问题,而应该是数据库服务器端做的处理。以前用delphi以及vb、vc写的程序都会出现类似的现象。
      

  5.   

    在.net开发中的认识误区一、.net程序再运行一次就会更快许多人对此的解释是:.net程序第一次运行时会被编译成本地代码,所以再次运行会更快。但遗憾的是,其实每次运行,那些IL都会被翻译一次,不会保留下来。所以并不会变快。但为什么有时候真的觉得快了呢?其实所有程序都是这样,这是Windows再为你缓存用过的组件。真正需要CPU时间的程序,多运行是不会加快速度的。二、.net程序运行起来一定很慢由于存在IL被翻译成本地代码的过程,.net程序的确要消耗一部分时间。但是.net程序仍然具有很高的效率,这一点许多Java虚拟机都比不上,这是为什么呢?因为多数.net程序内含的代码很少,几乎都是调用.net Framework中的类库,而这些类库在.net Framework安装的时候全部编译成为本机优化的本地码,并保存在程序集缓存里面。有了这个程序集缓存,你程序事实上的大部分已经是高效的本地代码,所以当然快了。但是,如果你进行大量数值计算类的操作,还是能够感到第一次运算的速度明显下降。所以建议大家将计算密集型的程序分离出来,编译成本地代码并保存在程序集缓存中,以后使用起来就很快了。from http://www.ectcom.com/tech/Read.asp?ID=48
      

  6.   

    我已经把数据库AutoClose设置为False了。这样connection不会自动变为无效的吧。如果是虚拟内存转移的问题的话,为什么另外一个销售程序却没有出现同样的情况呢?我查看了他们使用内存的情况,.net的使用了三十多mb,另外一个使用了二十多mb,就算是把硬盘上(虚拟内存)的东西再拷回内存,也用不了六七秒这么久吧。
      

  7.   

    就算是把硬盘上(虚拟内存)的东西再拷回内存,也用不了六七秒这么久吧。虚拟内存其实是非常慢的,只不过Windows的调度很有一套,所以平常我们感觉不出来而已。但是如果你机器的内存比较少的话,虚拟内存的大规模调度的确是需要很长的时间的,不仅仅是把你的程序拷回内存,还要计算把哪些内存腾出来放你的程序啊……
      

  8.   

    那台机器有512mb内存,开了3个销售软件,1个winamp,1个norton internet security。
    这样内存都不够用吗?如果真是虚拟内存的问题,有什么办法防止系统内存转移?这个问题是一定要解决的,使用方已经怨声载道了。真惨。
      

  9.   

    感觉应该是windows对内存管理的原因,我的VS没有连接数据库,但是放着一段时间没用,重新激活的时候也要很长时间
      

  10.   

    我觉得这个跟你的程序应该没有多大的问题。
    首先定义全局的connection和局部的connection的话应该速度没有这么离谱。至少我没有多大感觉。至于连接的话,如果单次执行没有什么大的问题的话,以后应该也不出出现大问题。
    我觉得楼上几位分析的虚拟内存很有道理。
      

  11.   

    你程序在后台也没事找事做也许能让Windows不把你的程序打入冷宫……
      

  12.   

    connection其实没有多大的资源的,除非你的这个connection一直打开的,且执行了很多的查询,这个时候如果慢的话,主要是数据库的问题我觉得可能是你的页面比较复杂,相关的UI资源被放到虚存上了