У меня есть простой класс, подобный следующему:
class Record
{
public Record(string fp1, string fp2, string fp3)
{
Filepath1 = fp1;
Filepath2 = fp2;
Filepath3 = fp3;
}
public string Filepath1 { get; private set; }
public string Filepath2 { get; private set; }
public string Filepath3 { get; private set; }
}
Каждый из этих путей к файлам будет очень похожим (и очень длинным) и будет отличаться только для последних нескольких символов пути к файлу.
Теперь я хочу, чтобы в памяти было несколько тысяч таких записей, и я хотел бы, чтобы эти записи занимали меньше оперативной памяти. Поэтому я пытаюсь придумать способы оптимизации использования памяти, и вот одно из решений, которое я нашел:
class Record
{
private string _baseFilepath;
private string _fp1;
private string _fp2;
private string _fp3;
public Record(string fp1, string fp2, string fp3)
{
_baseFilepath = /*get common first part of filepaths*/;
_fp1 = /*last part of fp1*/;
_fp2 = /*last part of fp2*/;
_fp3 = /*last part of fp3*/;
}
public string Filepath1
{
get { return _baseFilepath + _fp1; }
}
public string Filepath2
{
get { return _baseFilepath + _fp2; }
}
public string Filepath3
{
get { return _baseFilepath + _fp3; }
}
}
Вы можете видеть, что я мог бы сэкономить много оперативной памяти, особенно с очень длинными путями к файлам, где отличаются только последние несколько символов. Вопрос в том, есть ли простой способ получить общую первую часть пути к файлу?
EDIT:
В памяти может быть до 700 000 записей, а у реального производственного класса есть еще несколько путей к файлам. Я пытаюсь сделать приложение как можно более легким, и в то же время стараюсь сделать оптимизации максимально простыми для простоты.