none
What do you think is the most efficient way to enable a class which could be instantiated n times at most RRS feed

  • 问题

  • 大家觉得哪种实现(一个最多被实例化n次的类)最好 最高效?


    Mark as Answer if it helps. This posting is provided "AS IS" with no warranties, confers no rights.
    2011年12月9日 5:34

答案

  • 大家觉得哪种实现(一个最多被实例化n次的类)最好 最高效?


    Mark as Answer if it helps. This posting is provided "AS IS" with no warranties, confers no rights.

    建议可以的话,实现IClonable接口。需要时候直接调用Clone()方法即可。至于说Clone方法内部,可以通过使用MemoryStream或者直接new的方式实现;如果包含非托管对象或者需要释放内存的东西,请顺便实现IDisposible接口。
       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    2011年12月9日 6:31
    版主
  • 1、搞一个 static 的 int 的计数器,在 ctor 里面用 Interlocked.CompareExchange,超过特定数值 (n) 后就抛异常 (实例已经创建达到限制数量)

    2、使用 CountdownEvent

    第一种方案是最快的,因为 Interlocked 操作都是原子级别和 IL 级别的,第二种方法用了 Kernel Object (Event),会造成从 User-mode 到 Kernel-mode 的转换,肯定会慢。


    Mark Zhou
    2011年12月12日 7:32

全部回复

  • 大家觉得哪种实现(一个最多被实例化n次的类)最好 最高效?


    Mark as Answer if it helps. This posting is provided "AS IS" with no warranties, confers no rights.

    建议可以的话,实现IClonable接口。需要时候直接调用Clone()方法即可。至于说Clone方法内部,可以通过使用MemoryStream或者直接new的方式实现;如果包含非托管对象或者需要释放内存的东西,请顺便实现IDisposible接口。
       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    2011年12月9日 6:31
    版主
  • 1、搞一个 static 的 int 的计数器,在 ctor 里面用 Interlocked.CompareExchange,超过特定数值 (n) 后就抛异常 (实例已经创建达到限制数量)

    2、使用 CountdownEvent

    第一种方案是最快的,因为 Interlocked 操作都是原子级别和 IL 级别的,第二种方法用了 Kernel Object (Event),会造成从 User-mode 到 Kernel-mode 的转换,肯定会慢。


    Mark Zhou
    2011年12月12日 7:32