C#静态变量重新赋值 旧数据还是会占用内存么

如题 如果我的程序中有30个静态变量 而且频繁的对其进行赋值(几乎3秒一次)
那么之前的值(数据) 还是会占用内存么 这样挂起 会导致cpu飙高么?

看什么类型,如果是引用类型,会消耗一些内存。值类型直接覆盖。
引用类型,如果之前的对象没有其它引用,会被gc回收,但是如果你的内存比较大,未必会马上回收。

如果你不断生成新的datatable,datatable又很大,不断赋值,那么的确效率很低。
不仅如此,查询本身也会占用cpu。
如果可能的话,直接更新datatable内的某行某列,而不是频繁生成。

影响有多大就看你的datatable本身是否有很多数据,查询它是否耗费资源,你的计算机的内存大不大,cpu快不快,很多因素在里面。定性的说,肯定是有开销的。
定量的没法说。

引用类型变量的值是引用对象的地址,赋新值(指向一个新的引用对象),旧值(原来引用对象的地址)即被覆盖,不会占用内存,当然被引用对象是否还占有内存是另外一回事。

原来引用对象是否占有内存,以及GC如何回收及回收占用多少CPU资源等与使用静态变量或动态变量引用它没有什么关系。

在CLR托管应用程序中,存在一个“根”的概念,你动态生成的table可以作为“根”存在。垃圾回收器会按照一定的节奏回收内存,在一次垃圾回收中,垃圾回收器会沿着线程栈上行检查“根”。检查到方法内的“根”时,如果发现没有任何一个地方引用它,都意味着该“根”已经被停止掉,标记该根可被释放,然后对象所占用的内存空间可被释放。

这要看你的静态变量是什么类型,而决定的,比如字符串类弄就是还会占用内存的,不会被覆盖,要等到GC收集才会释放

静态数据成员与全局变量相似,它的内存分派产生在应用程序类实例化的时候,即程序运行期间,其释放在程序运行结束时。但是如果你连续不断的对其赋值,旧的会被iis的回收机制回收,因为它是基于进程的,进程会进行重载,除非你显式的在代码中处理。想要长久保存,要么持久化到数据库里面,要么保证网站一直处于活动中。

尽量不要使用过多的静态变量,这样会使代码数据混乱,导致出错也很难发现。

旧数据不会占用内存。