473,327 Members | 2,094 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,327 software developers and data experts.

How to share objects in an ASP.NET application

I am currently developing a statistics system in ASP.NET, and need to share
information about the customers websites, in this application.

(I have simplified my code, to make my project easier to explain.)

The simple version of the system is like this : A customer inserts HTML code
on his webpage, which contacts my statistics server each time the customers
website recieves a hit - like a classic "register website traffic" system.

When the customers hit reaches my web application, I need to maintain info
and state about the customers website - therefore I have a "website" class,
which hold information about the customer website (raw hits, unique hits,
website name, hit today ect).

So the first time a customer hits my servers, I need to instantiate an
instance of the website class, and update the information in this class.
Next time I recieve a request for the same customer, I only need to update
the websites information in the instance of that class.

So, here is a picture of how it works today, when the first hit comes in :

1. Customer #100 sends a request to my statistics application.
2. I have no information about customer #100, so I instantiate a new
instance of the "website" class.
3. I update information, and sets the "unique hits" variable to 1 (as this
is the first hit).

After this, all hits coming after the first hit, only updates information in
the "website" class (ie. adds 1 to the "unique hits" variabel) - like in
step 3.

I think (and hope) all the above is readable and understandable.

My problem now, is how I share these website classes in the global
application ????

Today I have a shared collection, which hold each instance of the website
class - like this :

public shared websites as new sortedlist

This shared collection can be accessed from all classes in my application,
and actually this works fine.

But, when my collection of websites reaches a certain limit (about 2500
"website" classes), the application starts to become VERY slow, and after
10-15 minutes it totally slows down and becomes useless.

And listen to me - we are talking VERY SLOW here - it runs on dual xeon HP
server, so hardware is enough for testcase ...

My question is now, if I am doing this the right way ??? How are you guys
shared objects among pages in an ASP.NET application ???

Is there are correct way to share objects globally in an ASP.NET application
?
-
Regards,
Tony Fonager, Denmark
Nov 18 '05 #1
6 1587
Check out the Appplication Cache.

--
HTH,
Kevin Spencer
..Net Developer
Microsoft MVP
I get paid good money to
solve puzzles for a living

"Tony Fonager" <tony@dontspamthisemailadress_fonager.dk> wrote in message
news:#r**************@tk2msftngp13.phx.gbl...
I am currently developing a statistics system in ASP.NET, and need to share information about the customers websites, in this application.

(I have simplified my code, to make my project easier to explain.)

The simple version of the system is like this : A customer inserts HTML code on his webpage, which contacts my statistics server each time the customers website recieves a hit - like a classic "register website traffic" system.

When the customers hit reaches my web application, I need to maintain info
and state about the customers website - therefore I have a "website" class, which hold information about the customer website (raw hits, unique hits,
website name, hit today ect).

So the first time a customer hits my servers, I need to instantiate an
instance of the website class, and update the information in this class.
Next time I recieve a request for the same customer, I only need to update
the websites information in the instance of that class.

So, here is a picture of how it works today, when the first hit comes in :
1. Customer #100 sends a request to my statistics application.
2. I have no information about customer #100, so I instantiate a new
instance of the "website" class.
3. I update information, and sets the "unique hits" variable to 1 (as this
is the first hit).

After this, all hits coming after the first hit, only updates information in the "website" class (ie. adds 1 to the "unique hits" variabel) - like in
step 3.

I think (and hope) all the above is readable and understandable.

My problem now, is how I share these website classes in the global
application ????

Today I have a shared collection, which hold each instance of the website
class - like this :

public shared websites as new sortedlist

This shared collection can be accessed from all classes in my application,
and actually this works fine.

But, when my collection of websites reaches a certain limit (about 2500
"website" classes), the application starts to become VERY slow, and after
10-15 minutes it totally slows down and becomes useless.

And listen to me - we are talking VERY SLOW here - it runs on dual xeon HP
server, so hardware is enough for testcase ...

My question is now, if I am doing this the right way ??? How are you guys
shared objects among pages in an ASP.NET application ???

Is there are correct way to share objects globally in an ASP.NET application ?
-
Regards,
Tony Fonager, Denmark

Nov 18 '05 #2
Hello Tony!
If you make your class a Singleton and declare yout collection i
global.asax?
The Singleton design pattern lets you use tha class without instanciating it
first, it keeps a private member of it's own type and uses that instance if
it is instanciated.

to use a Singleton class in code, just use it like this:

mynamespace.myclass.Instance.myMethod()

Instance is a public function.

Example code:

Class myClass

Public Shared moMyClass As myClass = Nothing

Private Sub new()
'private constructor disallowing other to create object directly
End Sub

Friend Shared Function Instance() As myClass
If moMyClass = Nothing Then
'First instance
'return a new object
moMyClass = New myClass()
Return moMyClass
Else
Return moMyClass
End If
End Function

Public Function myMethod()
'do something clever
End Function
End Class

Hope it helps!
"Tony Fonager" <tony@dontspamthisemailadress_fonager.dk> skrev i meddelandet
news:#r**************@tk2msftngp13.phx.gbl...
I am currently developing a statistics system in ASP.NET, and need to share information about the customers websites, in this application.

(I have simplified my code, to make my project easier to explain.)

The simple version of the system is like this : A customer inserts HTML code on his webpage, which contacts my statistics server each time the customers website recieves a hit - like a classic "register website traffic" system.

When the customers hit reaches my web application, I need to maintain info
and state about the customers website - therefore I have a "website" class, which hold information about the customer website (raw hits, unique hits,
website name, hit today ect).

So the first time a customer hits my servers, I need to instantiate an
instance of the website class, and update the information in this class.
Next time I recieve a request for the same customer, I only need to update
the websites information in the instance of that class.

So, here is a picture of how it works today, when the first hit comes in :
1. Customer #100 sends a request to my statistics application.
2. I have no information about customer #100, so I instantiate a new
instance of the "website" class.
3. I update information, and sets the "unique hits" variable to 1 (as this
is the first hit).

After this, all hits coming after the first hit, only updates information in the "website" class (ie. adds 1 to the "unique hits" variabel) - like in
step 3.

I think (and hope) all the above is readable and understandable.

My problem now, is how I share these website classes in the global
application ????

Today I have a shared collection, which hold each instance of the website
class - like this :

public shared websites as new sortedlist

This shared collection can be accessed from all classes in my application,
and actually this works fine.

But, when my collection of websites reaches a certain limit (about 2500
"website" classes), the application starts to become VERY slow, and after
10-15 minutes it totally slows down and becomes useless.

And listen to me - we are talking VERY SLOW here - it runs on dual xeon HP
server, so hardware is enough for testcase ...

My question is now, if I am doing this the right way ??? How are you guys
shared objects among pages in an ASP.NET application ???

Is there are correct way to share objects globally in an ASP.NET application ?
-
Regards,
Tony Fonager, Denmark

Nov 18 '05 #3
Do you want me to add the "website" class into the application cache ?

I cannot see how this can be done - I need to call functions on this
"website" object and set properties again and again - how does this work, if
the object is put into the cache ?

-
Regards,
Tony

"Kevin Spencer" <ks******@takempis.com> wrote in message
news:%2***************@TK2MSFTNGP15.phx.gbl...
Check out the Appplication Cache.

--
HTH,
Kevin Spencer
.Net Developer
Microsoft MVP
I get paid good money to
solve puzzles for a living

Nov 18 '05 #4
HenkeBenke,

I think I understand the concept of singletons, but anyhow I cannot see how
this makes it a better solution than the way I am doing it today !

Does singletons use less memory, are they faster or what is it (sorry, no
experience with singleton design patter).

And is there a difference when sharing the collection in globas.asax instead
of my page ?
-
Regards,
Tony Fonager

"HenkeBenke" <he************@hotmail.com> wrote in message
news:ec*************@TK2MSFTNGP11.phx.gbl...
Hello Tony!
If you make your class a Singleton and declare yout collection i
global.asax?
The Singleton design pattern lets you use tha class without instanciating it first, it keeps a private member of it's own type and uses that instance if it is instanciated.

to use a Singleton class in code, just use it like this:

mynamespace.myclass.Instance.myMethod()

Instance is a public function.

Example code:

Class myClass

Public Shared moMyClass As myClass = Nothing

Private Sub new()
'private constructor disallowing other to create object directly
End Sub

Friend Shared Function Instance() As myClass
If moMyClass = Nothing Then
'First instance
'return a new object
moMyClass = New myClass()
Return moMyClass
Else
Return moMyClass
End If
End Function

Public Function myMethod()
'do something clever
End Function
End Class

Nov 18 '05 #5
You post made me think ...

Why would I like only one instance of my website class ? My design needs me
to have an instance for each website (customer website), so that I can
differentiate each customers web traffic, recorded by my system!

Dont you agree ?
Regards,
Tony
Nov 18 '05 #6
Hi Tony,
Do you want me to add the "website" class into the application cache ?

I cannot see how this can be done - I need to call functions on this
"website" object and set properties again and again - how does this work, if the object is put into the cache ?
Application cache is simply a memory space. When you cache an object, it is
stored in memory. You can certainly use it any time. You could store a
Collection of "website" objects in the Application cache. Example:

((ArrayList) Cache["websCollection"]).Add(new website()); // Store

website w = ((ArrayList) Cache["websCollection"])[0]; // Fetch

I would recommend using the Cache, as it is thread-safe.

--
HTH,
Kevin Spencer
..Net Developer
Microsoft MVP
I get paid good money to
solve puzzles for a living

"Tony Fonager" <tony@dontspamthisemailadress_fonager.dk> wrote in message
news:un**************@TK2MSFTNGP14.phx.gbl... Do you want me to add the "website" class into the application cache ?

I cannot see how this can be done - I need to call functions on this
"website" object and set properties again and again - how does this work, if the object is put into the cache ?

-
Regards,
Tony

"Kevin Spencer" <ks******@takempis.com> wrote in message
news:%2***************@TK2MSFTNGP15.phx.gbl...
Check out the Appplication Cache.

--
HTH,
Kevin Spencer
.Net Developer
Microsoft MVP
I get paid good money to
solve puzzles for a living


Nov 18 '05 #7

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

3
by: kyle.tk | last post by:
So I have a central list of python objects that I want to be able to share between different process that are possibly on different computers on the network. Some of the processes will add objects...
346
by: rkusenet | last post by:
http://biz.yahoo.com/rc/040526/tech_database_marketshare_1.html Interesting to see that database sales for windows is more than Unix.
4
by: Ashura | last post by:
H I want to make a project where one or more object could be shared between 2 applications For example : the first application create a connection to a web-service, this connection is stored in...
1
by: Macca | last post by:
Hi, I have a C# Solution/Application that contain 4 projects. Each of these projects needs at some time to access the same database. I would like to know how to share a single connection...
8
by: Tony Fonager | last post by:
I am currently developing a statistics system in ASP.NET, and need to share information about the customers websites, in this application. (I have simplified my code, to make my project easier to...
5
by: Joe | last post by:
I have an application which runs in a non-secure environment. I also have an application that runs in a secure environment (both on the same machine). Is there any way to share the session data for...
6
by: tendim | last post by:
G'day group. Currently our organization us using VB6 based applications, and I am trying to push forward and migrate some of the smaller things to VB.NET, eventually migrating all applications...
1
by: Nayana Thara | last post by:
We have a web site where we have asp and asp.net. how can we share session data b/w the two environments.
6
by: Immortal Nephi | last post by:
First class is the base class. It has two data: m_Base1 and m_Base2. Second class and third class are derived classes and they are derived from first class. m_Base1 and m_Base2 are inherited into...
0
by: DolphinDB | last post by:
Tired of spending countless mintues downsampling your data? Look no further! In this article, you’ll learn how to efficiently downsample 6.48 billion high-frequency records to 61 million...
0
by: ryjfgjl | last post by:
ExcelToDatabase: batch import excel into database automatically...
0
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
by: Vimpel783 | last post by:
Hello! Guys, I found this code on the Internet, but I need to modify it a little. It works well, the problem is this: Data is sent from only one cell, in this case B5, but it is necessary that data...
0
by: jfyes | last post by:
As a hardware engineer, after seeing that CEIWEI recently released a new tool for Modbus RTU Over TCP/UDP filtering and monitoring, I actively went to its official website to take a look. It turned...
0
by: ArrayDB | last post by:
The error message I've encountered is; ERROR:root:Error generating model response: exception: access violation writing 0x0000000000005140, which seems to be indicative of an access violation...
1
by: CloudSolutions | last post by:
Introduction: For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
1
by: Shællîpôpï 09 | last post by:
If u are using a keypad phone, how do u turn on JavaScript, to access features like WhatsApp, Facebook, Instagram....
0
by: af34tf | last post by:
Hi Guys, I have a domain whose name is BytesLimited.com, and I want to sell it. Does anyone know about platforms that allow me to list my domain in auction for free. Thank you

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.