Hi,

Yes, the only thing that could work is doing async I/O. Using threads or the basic async model of the framework can deplete the thread pool very fast in web applications, and I did not see any big performance gains from it.

Moreover, there are (should be) far more Gets than Sets (in my app it's a 20:1 ratio), but Gets cannot really benefit from the async processing (only Sets). True, if the Get would take a significant time to execute you could fire a get request, do some work then wait for the results, but it's not the majority.

Or is it for others?

Anyway just submit a patch and we'll see :)



a.




On Jan 16, 2008, at 9:21 PM, Ciaran wrote:



On Jan 16, 2008 7:29 PM, Kieran Benton <[EMAIL PROTECTED]> wrote:
Take a look at http://aspzone.com/blogs/john/articles/521.aspx.


That seems to be the simplest way to implement just using a delegate and letting the framework do the heavy lifting J

Thanks, don't worry I can use the built-in ThreadPool implementation in a similar fashion, but will gain parallelisation, I don't *think* you get that with the approach in that particular article, my problem is more trying to make sense of the 'Begin/End' *convention* in the 'BCL' [new term for me]

For example, on the 'Socket' class the EndSend method, appears to cancel a pending async send, but on most other Begin/Send methods (Webservice methods for example), it seems to provde a 'helper' method to get hold of the async result, but again it isn't clear to me what the correct approach is in this case :) (the article appears to suggest the latter)!
- Ciaran



From: Ciaran [mailto:[EMAIL PROTECTED]
Sent: 16 January 2008 12:07
To: Kieran Benton
Cc: [email protected]

Subject: Re: Enyim.Memcached and asynchronous sets



On Jan 16, 2008 11:50 AM, Kieran Benton <[EMAIL PROTECTED]> wrote:

Hi Ciaran,

I think this is definitely something that would be of benefit, as you're right, if you've architected your app correctly most SETs can be asynchronous. I'd argue for a BeginStore / EndStore standard pattern though like in the rest of the BCL.

As I understand it, this is simply a naming convention and adding a parameter that implements IAsyncResult (and then using it correctly? ) Is this correct ?
- ciaran


Cheers,

Kieran


From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] ] On Behalf Of Ciaran
Sent: 16 January 2008 11:41
To: [email protected]
Subject: Re: Enyim.Memcached and asynchronous sets



On Jan 16, 2008 9:45 AM, Ciaran <[EMAIL PROTECTED]> wrote:

HI,
Am I better modifying the Enyim.Memcached client to support an Async Set [clearly a workqueue around the normal set command] (and provide you with another patch), or just wrap the existing client in my own facade to provide this functionality, i.e. what would 'a' (Enyim) prefer.

On the off-chance that someone's interested, the following code :
            IList<IEndPoint> servers = new List<IEndPoint>();
servers.Add(new Enyim.Caching.Configuration.Code.EndPoint("127.0.0.1", 11211)); MemCachedClientConfiguration configuration = new MemCachedClientConfiguration(servers); MemcachedClient client = new MemcachedClient(configuration);
            DateTime before = DateTime.Now;
            for (int i = 0; i < 10000; i++)
            {
                Guid guid = Guid.NewGuid();
                client.Store(StoreMode.Set, guid.ToString(), guid);
            }
            DateTime after= DateTime.Now;
Console.Out.WriteLine(String.Format("Took {0}ms to do 10000 stores", ((TimeSpan)(after-before)).TotalMilliseconds));
            DateTime beforeAsync = DateTime.Now;

            for (int i = 0; i < 10000; i++)
            {
                Guid guid = Guid.NewGuid();
client.StoreAsync(StoreMode.Set, guid.ToString(), guid);
            }
            after = DateTime.Now;
Console.Out.WriteLine(String.Format("Took {0}ms to do 10000 stores", ((TimeSpan)(after - beforeAsync)).TotalMilliseconds));

Prints the following timings:
Took 1734.3861ms to do 10000 stores
Took 62.5004ms to do 10000 stores
(Interestingly the *actual* time to do the 10000 stores asynchronously, came out at about 1200ms, because many stores occurred in parallel fwiw)

Thanks
- Ciaran


--
- Ciaran




--
- Ciaran




--
- Ciaran

Reply via email to