Click here to Skip to main content
15,936,466 members
Articles / General Programming / Usability
Tip/Trick

Using PostSharp to cache methods

Rate me:
Please Sign up or sign in to vote.
4.80/5 (2 votes)
9 May 2014CPOL2 min read 18.6K   176   7   6

Introduction

Using PostSharp's assembly modifications you can quite easily cut method consumption time down by caching methods. The library will find a marked cached method, and every call will be checked for with similar arguments, if the same arguments were found, it will immediately return the cached return value of the function call earlier.

Background

This trick uses a library called PostSharp, which has modifies your assembly. This allows you to track method calls and much more. Caching is not an old trick and has been around for a long time. Most web browsers use web page caching, and in this article I will show you how to cache methods within your assembly. Caching methods is a very interesting concept. To use this trick you must know what "caching your method" really means. Caching your method stores your method's return value after a call. Once the cached method is called once the arguments, return value, and method go into a dictionary.

Setting up your project

Before you start modifying your project you need to have included the article's source package. Make sure that you have also installed PostSharp via NuGet or by download. After installation, you also need to add PostSharp as a reference to your project.

Image 1

After clicking "Add Reference...", A dialog should then appear. Make sure you click Browse -> Browse...

Then find PostSharp and click "OK", If you have done everything successfully, PostSharp should now be listed in your references.

Repeat this process instead by adding the CacheLibrary to your project's references.

Using the code

This library will work the best for methods that produce constant results, given the same arguments. This means that your method(s) should not use variables that involve time or randomness. To mark a method simply add the attribute StoreInCache to your method.

C#
[StoreInCache]
public static int Foo(int bar)
{
    return bar;
}

History

5/8/14 - Updated CacheLibrary with new functionalities.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
QuestionGreat! Pin
Volynsky Alex8-May-14 23:48
professionalVolynsky Alex8-May-14 23:48 
QuestionOne query regarding method caching Pin
Tridip Bhattacharjee7-May-14 20:57
professionalTridip Bhattacharjee7-May-14 20:57 
AnswerRe: One query regarding method caching Pin
austinbox8-May-14 11:51
austinbox8-May-14 11:51 
Yes, this is a very good question. Yes if you have a method with 1000 different parameter's used, you might want to reconsider using this to store in a cache. But, in the newest version you can now clear the cache by calling:
C#
CacheManager.ClearCache();

Also if you need to know if a method returned a cached result, a good way of checking would be to check if the method has cached data. You can test this in the newest version by calling:
C#
CacheManager.IsCached(string methodName, params object[] args);

Please let me know if you have any other questions.
GeneralRe: One query regarding method caching Pin
Tridip Bhattacharjee8-May-14 21:18
professionalTridip Bhattacharjee8-May-14 21:18 
GeneralRe: One query regarding method caching Pin
austinbox9-May-14 13:04
austinbox9-May-14 13:04 
QuestionNice! Pin
Volynsky Alex6-May-14 22:33
professionalVolynsky Alex6-May-14 22:33 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.