Tag: singleton

试图通过使用Singleton来确定此代码是否会带来任何好处

我正在开发一个项目,其中一个联合开发人员(以及之前的开发人员)使用Singleton / Facade几乎每个页面的内部都有很多方法调用,但实际上并没有维护数据。 例如: public class FooFacade { private static FooFacade m_facade = null; private static DataAccessManager m_dataAccessMgr = null; public StringBuilder Status {get; set; } private FooFacade() { this.Status = new StringBuilder(); } public static FooFacade getInstance() { if (m_facade == null) { m_dataAccessMgr = DataAccessManager.getInstance(); m_facade = new FooFacade(); } return m_facade; } […]

MonoState,Singleton或Derived Forms:CRUD应用程序的最佳方法?

我有一个相当大的CRUD WinForm应用程序,有很多对象。 人员,报名,计划,案例注释等 。 应用程序中有超过30种表单,逻辑上分解了UI。 会员,注册,计划,CaseNotes等 。 我试图找出如何在搜索表单上搜索并将该对象传递给下一个请求的表单后如何创建我的Person对象 。 无论那是什么,让我们说人口统计学 。 缺点是我需要Person对象在整个App中可用,并且只能有一个。 现在我有ZERO接触设计模式,但我正在尝试。 我已阅读http://www.switchonthecode.com/tutorials/csharp-tutorial-singleton-pattern和http://www.yoda.arachsys.com/csharp/singleton.html但我想确保我理解正确将此应用于我的情况。 首先,示例说明您正在访问引用 ,对吗? 我错了还是需要访问该值 ? 其次,还有什么我需要做的才能使全球可用吗? 我只是在每个表单上声明一个实例,但通过这个Singleton模式,以便没有多于一个? 谢谢 编辑1 为了澄清,所有对象都是Person的子对象。 此外,正如搜索页面所躲避的那样; 用户可以选择不同的currentPerson。 但他们一次只能与一个人互动。 最后,正如我所说的那样,我是一个婴儿,如果我应该考虑其他事情,请说明一个不同的方法,如果你愿意提供一些解释,为什么,我会非常感激。 编辑2 根据Medicine Man的评论我认为我已经澄清了。 首先,感谢迄今为止贡献的所有人。 其次,我不知道关于设计模式的第一件事,如果在我目前的情况下需要某一个,我当然没有最模糊的。 如果有人有一个更好,更简单,或者,在您看来,更合适的方法将数据对象从FORM传递到FORM到FORM然后请告诉。 最后,我需要一种跟踪信息的方法,因为我的用户从一个地方到另一个地方。 谢谢

如何以及何时处置/垃圾收集单例实例

我正在使用从嵌套类创建的Singleton实例。 这个实例保存了一些静态集合,这些集合在处理Singleton时被清除,但问题是我得到了对非null处理的Singleton的引用,它没有正确地进行垃圾回收。 我想知道WHEN以及如何完全处理和垃圾收集我的Singleton实例,以便在dispose(并设置为null)后再次查询实例时,会创建一个新实例。 我对Singleton实例使用以下嵌套模式: public class SingletonClass : IDisposable { private List _collection; private SingletonClass() { } public static SingletonClass Instance { get { return Nested.Instance; //line 1 – this line returns the non-null instance after dispose and setting the Singleton instance to null which is causing problems } } private void Init() { _collection […]

C#Singleton线程安全

我有一个类似于此的单例类 public class Singleton { private static Singleton m_instance; private Timer m_timer; private static List m_cacheObjects; private Singleton() { m_cacheObjects = new List(); m_timer= new Timer(MyTimerCallBack, null, TimeSpan.FromSeconds(60), TimeSpan.FromSeconds(60)); } public static Singleton Instance { get { if (m_instance == null) { m_instance = new Singleton(); } return m_instance; } } private void MyTimerCallBack(object state) […]

我可以用这种方式为所有派生的单身人士定义一个抽象类吗?

这是我的抽象类,每次我想创建一个Singleton时都必须派生它: public abstract class Singleton where T : Singleton { private static readonly Lazy _instance = new Lazy(() => { var constructor = typeof(T).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, new Type[0], null); return (T)constructor.Invoke(null); }); public static T Instance { get { return _instance.Value; } } public Singleton() { } } 所以,每次我需要遵循Singleton设计模式时,我可以这样做: sealed class Server : Singleton […]

C#中的单身人士

我想为创建单例类收集更多变体。 你能否根据你的意见向我提供C#中最好的创作方式。 谢谢。 public sealed class Singleton { Singleton _instance = null; public Singleton Instance { get { if(_instance == null) _instance = new Singleton(); return _instance; } } // Default private constructor so only we can instanctiate private Singleton() { } // Default private static constructor private static Singleton() { } }

使用单例multithreadingC#制作程序

我用C#编写了一个程序。 现在我完成了所有function,它的工作原理。 但只能用一个线程运行。 我正在进行大量计算,有时会将大约300 MB或更多的测量文件加载到应用程序中。 我现在想要使程序multithreading,因为在强烈处理或i / o操作时用户体验非常糟糕。 重构程序的最佳方法是什么,以便可以在没有太多附加的情况下制作multithreading? 我知道这是我之前想要的东西。 但我没有。 我使用单例模式来处理大约3个重要的模块,这些模块几乎涉及程序的所有其他function。 我使用了或多或少干净的MVC(模型视图控制)架构。 所以我想知道是否有可能让用户界面在一个线程中运行而另一个应用程序在另一个线程中运行。 如果没有,加载和解析300MB,创建对象大约需要3分钟才能完成。 在这个时候,用户没有得到GUI的响应。 :/ 更新:我的单身人士被用作一种存储。 一个单例保存解析的测量文件的对象,而另一个单例保存结果。 我有不同的计算,它使用相同的测量文件并创建他们想要使用其他单例保存的结果。 这是一个问题。 第二个是让人员对用户操作做出响应,或者至少避免窗口没有响应的警告。 谢谢大家的所有建议。 我会试试看。 对不起,我很抱歉。

我们如何为Window创建Singleton实例?

我已经搜索过在WPF中为窗口创建一个Singleton对象。 public static Test DefInstance { get { if (formDefInstance == null) // formDefInstance.IsDisposed { initializingDefInstance = true; formDefInstance = new cas18(); initializingDefInstance = false; } return formDefInstance; } set { formDefInstance = value; } } 但是forDefInstance.IsDisposed不起作用并抛出错误。 关于这个的任何想法?

确保Singleton只调用一次db查询

我正在尝试创建一个负责读取所有用户访问设置的对象。 我已经创建了这样的类: public class SettingsManager { private static string _connString = @”Data Source=MyDB;Initial Catalog=IT;Integrated Security=True;Asynchronous Processing=true;”; private const string _spName = “SettingTest”; private IEnumerable _mySettings; private static readonly Lazy _instance = new Lazy(() => new SettingsManager()); private SettingsManager() { //Console.WriteLine(“Hello from constructor”); if (_mySettings == null) _mySettings = ReadSettings(); } public static SettingsManager Instance { […]

单身人士与终结者但不是IDisposable

这就是我对“CLR via C#”,“Effective C#”和其他资源中的IDisposable和终结器的理解: IDisposable用于确定性地清理托管和非托管资源。 负责非托管资源的类(例如文件句柄)应该实现IDisposable并提供终结器以保证它们被清除,即使客户端代码没有在实例上调用Dispose()。 仅负责托管资源的类永远不应实现终结器。 如果你有一个终结器,那么你必须实现IDisposable(这允许客户端代码做正确的事情并调用Dispose(),而终结器可以防止泄漏资源,如果他们忘记)。 虽然我理解并同意上述所有内容,但有一种情况我认为打破这些规则是有意义的:负责非托管资源的单例类(例如提供对特定文件的单点访问) )。 我认为在单例上使用Dispose()方法总是错误的,因为单例实例应该在应用程序的生命周期中存在,如果任何客户端代码调用Dispose(),那么你就被填充了。 但是,您需要一个终结器,以便在卸载应用程序时终结器可以清理非托管资源。 因此,在我看来,使用没有实现IDisposable的终结器的单例类似乎是一件合理的事情,但这种类型的设计与我所理解的最佳实践相反。 这是一种合理的方法吗? 如果没有,为什么不呢?什么是优越的选择?