C#新手,问题描述的很不专业,请高手们解答的时候尽量多说点细节,只提个概念可能还是一头雾水问题一:
现在手头有个工程软件要开发,其中涉及大量中间变量的读写,预计有一两千个
不知道这样的情况,用什么方式存储和读写这些中间变量,需要事先在主类的开头声明好么?设想的方法一:
用 ini文件 实现读写的。ini文件的读写是调用win32的api,非托管代码不安全。
方法二:
Access 数据库读写中间变量。Access应该比 ini的读写快一点,而且不用调用 win32 api,代码安全。
方法三:
VS里貌似有一个程序参数的,忘了在哪儿找过的??好像本质上是个XML表,.NET 里用这种 XML 来代替以前的 ini文件 实现参数读写控制
方法四:
静态类里声明好所有的成员变量,在主类里用 静态类.成员名 方式逐个调用。但是需要对静态类的每个成员写 get set 的属性,也挺麻烦的
方法五:
最直接的,在winform的构造器里把所有几千个变量声明好,再接下来的程序里随意调用。缺点很明显。不知道大家有什么建议?这些变量之间没有什么互相联系,都是相对独立的例如  M1AAA, M1AAB, M1AAC,一共7套这样的中间变量,大部分中间变量在工程计算里内部临时调用,另外一部分中间变量最终要输出到界面以及外部excel供分析作图用问题二:
C#主UI线程只是启动程序和更新界面,具体的活儿都有几百个定时器 System.Timers.Timer 触发完成,定时器线程里的活儿计算完或者等待处理完以后用delegate返回更新UI线程中界面的显示值。
现在刚开始做程序,只有十几个定时器还比较容易搞清楚其中的逻辑关系。等到再往后开发,就担心这些定时器之间互相会不会冲突?有没有什么比较好的方式管理这些定时器之间的顺序逻辑?比如有一个总定时器 G1 控制 第一台机器的工作时间,定时到后再次触发自身重新启动一次定时,同时更新第一第二台机器的UI显示值。这样的 G1到G7的全局定时,会在某些随机时间被终止(机器随机坏了,不再加工,因此终止),此时启动终止后的处理机制,另一套定时器 MTTR1, MTBF1 开始计算终止过程中对生产线的各种影响并在定时到后恢复对应的 G全局定时器,同时关闭自身的计时功能。而在G定时器控制机器加工的过程中,又需要设定启动机器,关闭机器,休眠机器等几种状态所需要经历的时间,这些经历时间又需要对应的计时器来触发。如此整个工程中总有上百个定时器因为平时写程序都是一个线程里做的,很少涉及如此多的定时器,担心开发到后面出了问题,于是想一开始先明确思路 

解决方案 »

  1.   

    除了access,其实用sqlite可能更方便点
    几千个变量可以如果有些联系,最好用面向对象组织一下,全部放在一个静态类里有点傻,除非你的逻辑代码要在这里面调用到全部变量
    几百个定时器真不是什么好设计,先想一想比较好
      

  2.   


    1.请问如何用面向来组织呢?第一次做这么复杂的东西,没太多概念
    2.这个工程确实是需要涉及很多定时的一套real-time系统,每个机器都有几套固定的时间长度参数,比如启动时间,停止时间,加工时间,除此之外还有一些可变时间,如果不用那么多定时器,还有别的好方法么?
      

  3.   

    1. 这个要看这些变量之间的关系还有你的应用需求
    2.一个相似的场景是Windows环境的多进程,每个进程都有自己的句柄、启动时间、空闲时间、停止时间....
    但是如果要定时监控它们,一个定时器足以应付,不是吗PS:我举的例子不一定恰当
      

  4.   

    是否可以这样
    机器信息的监控处理你全部放在“服务端”定时器中 C#足以
    每台机器的状态信息由“客户端”程序来收集并发送,由于直接与硬件打交道,考虑到效率,用C/C++可能更好一点看着办吧
      

  5.   

    1.
    能给个应用案例学习下么?还是不太清楚如何用OOP来组织
    2.这个应用的客户端是一些线程的motor control,用控制台来操作,我用C#的后台调用控制台方式来操作“这些客户端”他们的内部程序已经烧好了所以我只能进行服务器端编程。那么又如何用一个定时器来应付所有的监控呢?
      

  6.   


    如果用sqlite数据库,我每个定时器触发一个工作线程去读写,会不会造成锁死之类的麻烦
      

  7.   


    OOP一下说不清楚的,需要一个学习的过程
    死锁跟你的设计和代码逻辑有关,也正是项目要克服的难点。可以用Threading.Timer
    去找点多线程的资料看看
      

  8.   

    我现在写到十几个定时器,都用的 System.Timers.Timer,暂时还没出啥问题,以后多了不知道会不会OOP的话有朋友建议用哈希表hashmap或者ArrayList之类的,还得学下这两个数据结构
      

  9.   


    那两个都过时了,用泛型版的吧,Dictionary<TKey, TValue>