非常に高速なこのアプローチを使用して、ディレクトリ内のすべてのファイルを再帰的に見つけます。
とにかく、構造体の各ファイルに情報を保存します。
struct Info
{
public bool IsDirectory;
public string Path;
public FILETIME ModifiedDate;
}
だから今、私は天気を決定して、ヘルパーメソッドをその構造体の内部または別の場所に配置して、効率を上げようとしています。
ヘルパー メソッドは次のとおりです。
struct Info
{
public bool IsDirectory;
public string Path;
public FILETIME ModifiedDate;
// Helper methods:
public string GetFileName(){ /* implementation */ }
public string GetFileSize(){ /* implementation */ }
public string GetFileAtributes() { /* implementation */ }
// etc many more helper methods
}
私は何千ものファイルをメモリに保存していますが、Info 内にこれらのメソッドがあるとパフォーマンスに影響するかどうかわかりません。つまり、これらのメソッドを削除して、次のように拡張メソッドにする方がよいでしょう。
public static class ExtensionHelperMethods
{
static public string GetFileName(this Info info){ /* implementation */ }
static public string GetFileSize(this Info info){ /* implementation */ }
static public string GetFileAtributes(this Info info) { /* implementation */ }
// etc many more helper methods
}
だから私の質問は、Info
インスタンス構造体であり、それらのメソッドを内部に持つと、より多くのメモリが必要になるからですか? インスタンス構造体の場合Info
、各メソッドはメモリ内に異なるアドレスを持ちますか?
私は両方のテクニックを試しましたが、違いがわかりません。もっと多くのファイルを試してみる必要があるかもしれません。
編集
@Fabio Gouwがライトであることを証明するには、次のようにします。
// This program compares the size of object a and b
class Program
{
static void Main(string[] args)
{
InfoA a = new InfoA();
InfoB b = new InfoB();
if (ToBytes(a).Length == ToBytes(b).Length)
{
Console.Write("Objects are the same size!!!");
}
Console.Read();
}
public static byte[] ToBytes(object objectToSerialize)
{
BinaryFormatter bf = new BinaryFormatter();
MemoryStream memStr = new MemoryStream();
try
{
bf.Serialize(memStr, objectToSerialize);
memStr.Position = 0;
var ret = memStr.ToArray();
return ret;
}
finally
{
memStr.Close();
}
}
[Serializable]
struct InfoA
{
public bool IsDirectory;
public string Path;
}
[Serializable]
struct InfoB
{
public bool IsDirectory;
public string Path;
public string GetFileName()
{
return System.IO.Path.GetFileName(Path);
}
}
}