Лагает текстовый редактор при большом кол-ве строк в исходном коде

105
01 июня 2021, 12:30

У меня класс содержит более 600 строк кода, переносы я делаю не так часто, а когда код не вмещается в строку.

Сама среда, начинает отъедать почти 2 ГБ ОЗУ.

В коде присутствуют 2 примерно вот таких больших куска:

public static readonly Dictionary<Fcc, string> AviTypes = new Dictionary<Fcc, string>
{
    {Fcc.Iarl, "Archive location"},
    {Fcc.Iart, "Artist"},
    {Fcc.Icms, "Commisioned"},
    {Fcc.Icmt, "Comments"},
    {Fcc.Icop, "Copyright"},
    {Fcc.Icrd, "Creation date"},
    {Fcc.Icrp, "Cropped"},
    {Fcc.Idim, "Dimensions"},
    {Fcc.Idpi, "Dots per inch"},
    {Fcc.Ieng, "Engineer"},
    {Fcc.Ignr, "Genre"},
    {Fcc.Isgn, "Secondary Genre"},
    {Fcc.Ikey, "Keywords"},
    {Fcc.Ilgt, "Lightness"},
    {Fcc.Imed, "Medium"},
    {Fcc.Inam, "Name"},
    {Fcc.Iplt, "Palette setting"},
    {Fcc.Iprd, "Product"},
    {Fcc.Isbj, "Subject"},
    {Fcc.Isft, "Software"},
    {Fcc.Ishp, "Sharpness"},
    {Fcc.Isrc, "Source"},
    {Fcc.Isrf, "Source form"},
    {Fcc.Itch, "Technician"},
    {Fcc.Ismp, "Time code"},
    {Fcc.Idit, "Digitalization time"},
    {Fcc.Iwri, "Writer"},
    {Fcc.Ipro, "Producer"},
    {Fcc.Icnm, "Cinematographer"},
    {Fcc.Ipds, "Production designer"},
    {Fcc.Iedt, "Editor"},
    {Fcc.Icds, "Costume designer"},
    {Fcc.Imus, "Music"},
    {Fcc.Istd, "Production studio"},
    {Fcc.Idst, "Distributor"},
    {Fcc.Icnt, "Country"},
    {Fcc.Istr, "Starring"},
    {Fcc.Ifrm, "Total number of parts"},
    {Fcc.Strn, "Stream name"},
    {Fcc.Ias1, "First Language"},
    {Fcc.Ias2, "Second Language"},
    {Fcc.Ias3, "Third Language"},
    {Fcc.Ias4, "Fourth Language"},
    {Fcc.Ias5, "Fifth Language"},
    {Fcc.Ias6, "Sixth Language"},
    {Fcc.Ias7, "Seventh Language"},
    {Fcc.Ias8, "Eighth Language"},
    {Fcc.Ias9, "Ninth Language"},
    {0u, "???"}
};

Или вот такие огромные методы:

private bool ChunkReadIndx(AviChunk* chunk)
{
    AviChunkIndx* pIndx = (AviChunkIndx*) chunk;
    uint count = 0;
    ulong read = 0;
    sbyte* pRead = null, pBuff = null;
    if (!BeginReadChunk(chunk, ref read, &pRead, &pBuff))
    {
        return false;
    }
    Read(out pIndx->LongsPerEntry, ref read, &pRead);
    Read(out pIndx->IndexSubType, ref read, &pRead);
    Read(out pIndx->IndexType, ref read, &pRead);
    Read(out pIndx->EntriesInUse, ref read, &pRead);
    Read(out pIndx->Id, ref read, &pRead);
    pIndx->Idx.Std = null;
    pIndx->Idx.Field = null;
    pIndx->Idx.Super = null;
    bool retValue = true;
    if (pIndx->IndexType == 0x01 && pIndx->IndexSubType == 0)
    {
        Read(out pIndx->BaseOffset, ref read, &pRead);
        Read(out uint _, ref read, &pRead);
        count = (uint) Math.Min(pIndx->EntriesInUse, read / 8);
        pIndx->EntriesInUse = count;
        pIndx->Idx.Std = Memory.Instance.CAlloc<IndxStdEntry>(count);
        if (count == 0 || pIndx->Idx.Std != null)
        {
            for (int i = 0; i < count; i++)
            {
                Read(out pIndx->Idx.Std[i].Offset, ref read, &pRead);
                Read(out pIndx->Idx.Std[i].Size, ref read, &pRead);
            }
        }
        else
        {
            retValue = false;
        }
    }
    else if (pIndx->IndexType == 0x01 && pIndx->IndexSubType == 0x01)
    {
        pIndx->BaseOffset = 0;
        Read(out uint _, ref read, &pRead);
        Read(out uint _, ref read, &pRead);
        Read(out uint _, ref read, &pRead);
        count = (uint) Math.Min(pIndx->EntriesInUse, read / 12);
        pIndx->EntriesInUse = count;
        pIndx->Idx.Field = Memory.Instance.CAlloc<IndxFieldEntry>(count);
        if (count == 0 || pIndx->Idx.Field != null)
        {
            for (int i = 0; i < count; i++)
            {
                Read(out pIndx->Idx.Field[i].Offset, ref read, &pRead);
                Read(out pIndx->Idx.Field[i].Size, ref read, &pRead);
                Read(out pIndx->Idx.Field[i].OffsetField2, ref read, &pRead);
            }
        }
        else
        {
            retValue = false;
        }
    }
    else if (pIndx->IndexType == 0x00)
    {
        pIndx->BaseOffset = 0;
        Read(out uint _, ref read, &pRead);
        Read(out uint _, ref read, &pRead);
        Read(out uint _, ref read, &pRead);
        count = (uint) Math.Min(pIndx->EntriesInUse, read / 16);
        pIndx->EntriesInUse = count;
        pIndx->Idx.Super = Memory.Instance.CAlloc<IndxSuperEntry>(count);
        if (count == 0 || pIndx->Idx.Super != null)
        {
            for (int i = 0; i < count; i++)
            {
                Read(out pIndx->Idx.Super[i].Offset, ref read, &pRead);
                Read(out pIndx->Idx.Super[i].Size, ref read, &pRead);
                Read(out pIndx->Idx.Super[i].Duration, ref read, &pRead);
            }
        }
        else
        {
            retValue = false;
        }
    }
    else
    {
        Debug.Write("unknown type/subtype index", "WARNING");
    }
    return EndReadChunk(&pBuff, retValue);
}

Но даже при сворачивании таких блоков, редактор все так же лагает, т.е. я могу написать несколько слов, а они могут появится спустя несколько секунд.

В чем может быть причина таких зависаний редактора если работает один плагин Resharper, а IntelliSense и IntelliCode отключены?

P.S. Помогает перезапуск среды, но это не является решением, т.к. спустя минут так 20, зависания возвращаются.

READ ALSO
Изменение радиобаттон&#39;ов окна C#

Изменение радиобаттон'ов окна C#

День добрый, господаКак нибудь возможно программно обратиться к данному окну и поменять текущий радио баттон на нужный мне ?

117
Цикл Button.Enabled для нескольких значений ASP.NET

Цикл Button.Enabled для нескольких значений ASP.NET

Столкнулся с проблемой: мне нужно чтобы занятые места (созданные в виде кнопок), нельзя было выбратьТо есть переключить их значение Enabled в false

126
Запись в ветку реестра Local Machine через C#

Запись в ветку реестра Local Machine через C#

Не проходит запись в реестр по пути:

121