c# - Fody - method caching -
i using fody method cache (https://github.com/dresel/methodcache) first time. doing wrong because following code not work:
static void main() {   console.writeline("begin calc 1...");   var v = calc(5);   console.writeline("begin calc 2..."); //it last same first function call   v = calc(5);   console.writeline("end calc 2..."); }   [cache]  static int calc(int b)  {    thread.sleep(5000);    return b + 5;  } what should use following:  first call: cache arguments keys , return value value.  other call: if cache[arg1, arg2,...] exist return cache value without completing function ? (using cache attribute)
as stated in github issue, static method caching added in 1.3.1.
as methodcache.fody designed, have add cache getter class contains methods should cached , implement cache. can program own cache or use adapter existing cache solutions (see documentation of https://github.com/dresel/methodcache).
the minimum code sample (with basic dictionary cache implementation) this:
namespace consoleapplication {     using system;     using system.collections.generic;     using system.threading;     using methodcache.attributes;      public class program     {         private static dictionarycache cache { get; set; }           [cache]         private static int calc(int b)         {             thread.sleep(5000);             return b + 5;         }          private static void main(string[] args)         {             cache = new dictionarycache();              console.writeline("begin calc 1...");             var v = calc(5);              // return cached value             console.writeline("begin calc 2...");             v = calc(5);              console.writeline("end calc 2...");         }     }      public class dictionarycache     {         public dictionarycache()         {             storage = new dictionary<string, object>();         }          private dictionary<string, object> storage { get; set; }          // note: methods contains, retrieve, store must following:          public bool contains(string key)         {             return storage.containskey(key);         }          public t retrieve<t>(string key)         {             return (t)storage[key];         }          public void store(string key, object data)         {             storage[key] = data;         }     } } however more sophisticated solution use service class, icache interface getter , contructor injection of cache. icache wrap existing caching solutions.