我使用这个非常快的方法递归地找到目录中的所有文件。
无论如何,我将信息存储在结构中的每个文件中:
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);
}
}
}