|
Sure.- Singleton Example
- Let's say that you're implementing an interpreter for a scripting language that contains some mathematical operators. Now, you design your language so that none of the objects that implement the operators (such as AddOperator, MultOperator) have state, just a collection of methods. To reduce the memory consumption of the interpreter, you can choose to have each of those operators as singletons, one instance of the AddOperator will exist in any AppDomain. This is in contrast to parsing the input and creating an AddOperator into an abstract syntax tree every time the parser encounters the + symbol.
- Pool Example
- Quite often in multi-threaded applications that access data from a persistent store, the connections that the applications use to connect to the persistent store are pooled. For example, it's a common practice to pool a certain number of connections to a database because it's so darn expensive to create the connection. Then, when an application wants to get data from the database, it asks the pool for a connection instead of creating its own.
I think that your confusion may be coming from the thought that "a resource pool is a singleton." That can be true and quite often is. In general, why would you create multiple pools of resource connections when that kind of defeats the purpose of having that limited number of expensive connections?
"we must lose precision to make significant statements about complex systems."
-deKorvin on uncertainty
|
|
|
|
|
Thanks for explanation.
However, could you please select another example.
Call me a dumbo, but i am in a loss of differentiating between the two.
For example, if i have a web application where there are 7 odd connections strings. Do i hav to use the Singleton or just use Pooling to take care of that?
You are already writing good and helping my understanding.
Appreciate Much!
|
|
|
|
|
In general, why would you create multiple pools of resource connections when that kind of defeats the purpose of having that limited number of expensive connections?
Designing an architecture around singleton objects that hold state may lead to problems if requirements change in unexpected ways. Even if it's expected that the singleton will be associated with a hardware resource of which there will never be more than one (e.g. the current display monitor) it's possible that there may in future be a need to support more than one such resource, no matter how unlikely it may seem today.
That having been said, the proper type of object is something like a singleton, in that at most one such object should be associated with any particular hardware resource, and the object should persist as long as anyone has use for it.
There are other pooling situations, like thread pools, where sharing one pool between different parts of an application may lead to resource starvation. While there may be ways of having a single pool implement a suitable prioritization strategy to ensure that every separately-designated part of an application is allowed to have at least one thread running at a time from a shared pool, having different parts use different pools may be simpler.
|
|
|
|
|
Right you are! That's why I started it with "In general." Special cases for anything exist.
"we must lose precision to make significant statements about complex systems."
-deKorvin on uncertainty
|
|
|
|
|
nicetohaveyou wrote: What are the differences between singleton and pooling?
nicetohaveyou wrote: How are hese two things similar and different?
Well, if you have a Singleton Pool they are one thing and so not different nor similar.
|
|
|
|
|
Is there a lifeguard on duty there? 'Cause I'm not that strong of a swimmer....
"we must lose precision to make significant statements about complex systems."
-deKorvin on uncertainty
|
|
|
|
|
You might ask that question in the get-together forum.
My best guess is the guard is in one of the lounges though.
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
|
|
|
|
|
Visions of Pamela Anderson running in slow motion...
|
|
|
|
|
|
Don't crosspost in a bunch of forums. It's considered very rude.
|
|
|
|
|
Hi,
When to use patterns and practices?
I think it's used for architecture like 3 tier...
How to start using it?
I read on Microsoft that it's recommended arch. for .net projects but how to start using it?
|
|
|
|
|
A pattern is merely a recognition that certain types of problems have been dealt with in a certain fashion before and that this was a successful way of dealing with it. If you like, you can think of patterns as bricks which can be used to build an application.
Whenever you build an application, you should start off by thinking about the problem you're trying to solve. When you start to break it down, you'll be able to identify what patterns are appropriate.
"WPF has many lovers. It's a veritable porn star!" - Josh Smith As Braveheart once said, "You can take our freedom but you'll never take our Hobnobs!" - Martin Hughes.
My blog | My articles | MoXAML PowerToys
|
|
|
|
|
|
Patterns are great for solving common problems. The only problem is a lot of the examples accompanying design pattern publications don't appear to be common problems in my eyes. I am writing some articles about design patterns at the mo. and I'm going to provide practical examples.
My first article is about the Implementing The State Software Design Pattern[^]. I will be writing many more!!
When I have a few Design Pattern articles in my blog I will create a new 'Design Patterns' header for them so they are easier to find.
Hope my blog will assist you.
Ps. Also, do a google for Extract Method, Extract Parameter. These are a couple of basic patterns that can be applied to code straight away.
|
|
|
|
|
Visual Studio 2005 CE (Windows CE 5.0) Emulator not listing even after installation
why ??
thanks
|
|
|
|
|
Hi,
I am using mmc in my application, when i dynamically refer a dll using the following code.
Assembly assembly = Assembly.LoadFrom("PlgWebSvrAuto.2.dll");
objIConfig = (PlgWebServer.Proxy.IConfig)Activator.GetObject(typeof(PlgWebServer.Proxy.IConfig), "tcp://localhost:8085/PlgCamera");
objIConfig.UpdateDBData();
this goes and hits our server when the solution is executed, but does not work when the dll is installed and executed.
Any ideas please..
Thanks,
Renuga P
|
|
|
|
|
Hi All,
I'm trying to develop a application in vb.net,
to send any file from my PC to any bluetooth enabled mobile,
in coverage area of bluetooth dongle(connect with my usb port).
(More then 1 mobile via loop in 1 go)
Is there any class or library in .net is available.
If you can give me some sample code or link of any article...that will be very helpful for me.
Thnx.........
Vijay Jain
|
|
|
|
|
Hi,
As a part of one of my project implementation I was keen on using a centralized object creator along with the abstract fatory pattern.
As a part of it I have written the following class to solve the purpose of creating an object given an interface:
public class SimpleServiceLocater : ProviderBase, IServiceLocater
{
Dictionary<string, ConstructorInfo> typesDictionary = new Dictionary<string, ConstructorInfo>();
private object[] defaultParamsArray = new object[] { };
private Type[] defaultTypesArray = new Type[] { };
public override void Initialize(string name, NameValueCollection config)
{
base.Initialize(name, config);
}
public override string Name
{
get
{
return base.Name;
}
}
#region IServiceLocater Members
public virtual bool Register<IT, CT>() where CT : IT, new()
{
return this.Register<IT, CT>("");
}
public virtual bool Register<IT, CT>(string Name) where CT : IT, new()
{
ConstructorInfo t = null;
if (!typesDictionary.TryGetValue(typeof(IT).FullName + Name, out t))
{
t = null;
}
if(t == null)
{
this.Unregister<IT>(Name);
}
typesDictionary.Add(typeof(IT).FullName + Name, typeof(CT).GetConstructor(defaultTypesArray));
return true;
}
public virtual IT Resolve<IT>() where IT : class
{
return this.Resolve<IT>("");
}
public virtual IT Resolve<IT>(string Name) where IT : class
{
ConstructorInfo t = null;
if (!typesDictionary.TryGetValue(typeof(IT).FullName + Name, out t))
{
t = null;
}
if (t == null)
{
return default(IT);
}
else
{
return t.Invoke(defaultParamsArray) as IT;
}
}
public virtual bool Unregister<IT>()
{
return this.Unregister<IT>("");
}
public virtual bool Unregister<IT>(string Name)
{
return typesDictionary.Remove(typeof(IT).FullName + Name);
}
#endregion
#region IDisposable Members
public void Dispose()
{
this.typesDictionary.Clear();
}
#endregion
}
<pre>
However I am not sure about any performance implications of using the Activator.CreatInstance vs construcotr.Invoke.
Can any one please guide me or comment on the above class?
<div class="ForumSig">Regards,
Chandu</div>
|
|
|
|
|
This is so basic.
Manish.
|
|
|
|
|
Agreed.
I am interested in knowing the downside of using Activator.Createinstance vs Constructor.Invoke and also about do's n dont's while using them.
Regards,
Chandra V
|
|
|
|
|
When I had that same question, this blog post by the amazing Haibo Luo answered it quite well.
Activator.CreateInstance and beyond[^]
I hope you enjoy it.
"we must lose precision to make significant statements about complex systems."
-deKorvin on uncertainty
|
|
|
|
|
Thanks will go over it and let you know my thoughts.
Regards,
Cybernate
|
|
|
|
|
Is there any way to invoke remote programs using RDP Client control ..
vineesh
|
|
|
|
|
No. And for good reason. Launching an .EXE on a remote machine is a SEVERE security violation. Think about what some idiot virus writer could do with that ability.
|
|
|
|
|
hi,
after i clicked on 'publish' - a SetUp file was created with a group of files added to it.
i want to distribute it in the internet and in order to do that i need only one file.
do i need to use external program to do that or is there a way to do it from inside the .NET ?
are there any recomendations for external programs to use ?
thanks in advance,
avi
|
|
|
|