2008年10月23日木曜日

Gavotte RAMDisk

メモリが大変安くなったので、4GにしてGavotte RAMDiskを利用してみました。
約700MBのRamDiskが作成されたので、さっそくVisualStudioのソリューションをRamDisk上に配置。

...

あまり速くなりませんね。
計測すると確かに速くなっているのですが、体感できるほどではありませんでした。
期待してただけにちょっとガッカリ。

2008年10月8日水曜日

Delegate

戻り値の型が違うDelegateに代入する方法。

  1. Func<stringint> func = Convert.ToInt32;  
  2.   
  3. Func<stringobject> func2 = Delegate.CreateDelegate(typeof(Func<stringobject>), func.Method) as Func<stringobject>;  



↑の例の場合、戻り値がintのdelegateを戻り値がobjectのdelegateとして使うことができます。

何が便利か?というと、delegateとgenericを使用して、汎用的なコンバーターが作成可能になります。




  1. class MyConverter<T>  
  2. {  
  3.     private static Func<string, T> _func;  
  4.   
  5.     public static T Conv(string input)  
  6.     {  
  7.         return _func(input);  
  8.     }  
  9.   
  10.     static MyConverter()  
  11.     {  
  12.         MethodInfo m = null;  
  13.         Type type = typeof(T);  
  14.         if (type == typeof(int))  
  15.         {  
  16.             Func<stringint> func = Convert.ToInt32;  
  17.             m = func.Method;  
  18.         }  
  19.         else if (type == typeof(DateTime))  
  20.         {  
  21.             Func<string, DateTime> func = Convert.ToDateTime;  
  22.             m = func.Method;  
  23.         }  
  24.         _func = Delegate.CreateDelegate(typeof(Func<string, T>), m) as Func<string, T>;  
  25.     }  
  26. }  



↑のようなクラスを用意して、↓な感じで使用



  1. MyConverter<int>.Conv("123");  


このようなクラスを、Reflectionと組み合わせると結構便利です。