本帖最后由 fihuang1 于 2010-01-22 17:09:27 编辑

解决方案 »

  1.   

    同时访问单个实例时可能会出现数据不同步的问题,如下:
    class ClassA{
      public int a;
    }class ClassB{
      private Add(ClassA A){
        if (A.a<100) A.a++;   //如果多个ClassB对象同时执行Add(A)这样的操作,就可能出现A.a大于100的情况。
        else A.a=100;
      } 
    }
      

  2.   

    我这个单实例只是提供一些列的public方法和一个priavte变量。
    对外部调用者来说主要就是提供方法。
      

  3.   

    没有共享数据存储和共享资源。这个类可以做成static,也就是一个代码存储类,没有必要出现多个实例。
      

  4.   

    类实例化的时候,代码只存储一次,存储数据的空间与对象个数有关。是否静态是指类初始化(包含代码和数据)的时机是在类第一次被引用的时候。单件模式是一种实现方法,通过隐藏类的构造函数,并提供唯一的类实例来提供访问。
    例如:
    sealed class S{  //单件模式通常不允许继承
      private S(){};
      public static readonly S Instance = new S();
      public void someothermethod();
    }
    使用的时候用Instance. someothermethod();单件模式与静态类差别在于单件模式注重面向对象,静态类更多用于作为库函数。
      

  5.   

    sp1234总算出来了 
    我重新描述一下我的问题:我有一个单实例类,里面都是方法。当多个对象来访问这个单实例的时候,是不是会排队?是不是前面一个访问完了以后,后面的一个才能访问。
    假如没有用单实例的话,外部对象访问这个类就new一个对象出来,10个对象访问这个类就new10个对象出来,相互之间其实是完全没有关系的。如果是单实例的话,10个外部对象其实是访问的同一个对象,这样可能就会有一个先后顺序问题。如果有先后顺序问题的话,在效率上是不是会有影响(假如10000个对象访问这个单实例,排在第10000个的对象要等前面9999个对象访问完了以后才能访问)。
      

  6.   

    数据库操作类只要单实例或者连实例都不需要,设为静态类即可。多个对象同时访问它是否会有问题得看你操作类内部的SqlConnection对象是否是独立的。只要保证每个操作都单独new一个新的SqlConnection出来操作数据库,则根本不需要排队,至于连接池的问题,你可以使用系统自带的,SqlConnection对象调用dispose销毁时,并没有释放数据库连接,而是进入了系统连接池保存了下来,下次new一个新的对象时候会自动利用已有连接的。
      

  7.   

    如果是单核机器,所有运行的线程都是要排队等候CPU时间的
    如果是多核机器,代码是在同一个线程内运行,也是排队的如果是多核机器,开了多个线程,操作系统就有可能将一些线程放到不同的CPU中执行,如果这些线程访问同样的数据,就可能造成不同步,这时候才是真正的并发
      

  8.   


    会的,随便写个语句做个试验就可以了,比如
    static A a=new A();
    a.show("ss");
    a.show("bb");void show(string teststr){
          Console.write(teststr)
    }
    你多输出几次,不管怎么试,它的顺序都是ss,bb
      

  9.   

    上面这个列子也解释了 楼上说的意思你new 10000个对象出来 调用顺序也是按你原来的顺序
      

  10.   

    受不鸟楼主怎么可能影响么???只要你的调用不是互斥(临界区)的那么他们之间是相互没有任何影响的。楼主复习一下进程/线程以及Windows如何实现函数调用的。