Деструктор класса странно работает

Здравструйте.
В моём классе используются низкоуровневые объекты. Если я правильно понял, можно забить на их своевременное уничтожение и просто прописать это в деструкторе. В этом случае, сборщик мусора сам всё освободит, когда время настанет. Только вот, это как-то странно работает. Вот, собственно, сам класс:

        public class TwitchStreamInfo
        {
            public string title;
            public string videoId;
            public string streamId;
            public string videoUrl;
            public DateTime length;
            public int viewCount;
            public DateTime dateCreation;
            public DateTime dateDeletion;
            public string imagePreviewTemplateUrl;
            public string imageAnimatedPreviewUrl;
            public Stream imageData = null;
            public bool isPrime;
            public string infoStringJson;

            ~TwitchStreamInfo()
            {
                if (imageData != null)
                {
                    imageData.Dispose();
                }

                System.Diagnostics.Debug.WriteLine($"{ToString()}: {title}, {userInfo.DisplayName} is free");
            }
        }

Вот так создаётся:

        private int ParseVideosListJSON(string aJsonString)
        {
            JObject json = JObject.Parse(aJsonString);
            JToken jToken = json.Value<JToken>("videos");
            if (jToken == null) //false
            {
                TwitchStreamInfo stream = ParseStreamInfo(jToken.Value<string>());
            }
            else
            {
                JArray jsonArr = jToken.Value<JArray>();
                for (int i = 0; i < jsonArr.Count; i++) //в массиве один элемент
                {
                    lbLog.Items.RemoveAt(lbLog.Items.Count - 1);
                    lbLog.Items.Add("Обработка данных... " + (i + 1).ToString() +
                        " / " + jsonArr.Count.ToString());

                    TwitchStreamInfo streamInfo = ParseStreamInfo(jsonArr[i].ToString());
                    streams.Add(streamInfo);

                    FrameStream frameStream = new FrameStream();
                    frameStream.Parent = panelStreams;
                    frameStream.Location = new Point(0, 0);
 
					frameStream.OnActivate += Event_FrameStreamEvent_Activate; //названия названы не по фен-шую
                    frameStream.OnImgMouseDown += StreamImageMouseDown;
                    frameStream.DownloadButtonPress += Event_DownloadButtonClick;
                    frameStream.BackColor = FrameStream.colorInactive;
                    frameStream.SetStreamInfo(ref streamInfo);
                    framesStream.Add(frameStream);

                    Application.DoEvents();
                }
            }
            return streams.Count;
        }

 
        public static TwitchStreamInfo ParseStreamInfo(string jsonString)
        {
            TwitchStreamInfo stream = new TwitchStreamInfo();
            JObject json = JObject.Parse(jsonString);
			//тут парсинг
			return stream;
		}

Вроде как, создаётся только один экземпляр класса. Однако, при закрытии программы, в дебаг-лог выводится это:

"TwitchPrimeDownloader.exe" (CLR v4.0.30319: TwitchPrimeDownloader.exe). Загружено "C:\Windows\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources\v4.0_4.0.0.0_ru_b77a5c561934e089\mscorlib.resources.dll". Сборка модуля выполнена без символов.
TwitchPrimeDownloader.Utils+TwitchStreamInfo: ,  is free
TwitchPrimeDownloader.Utils+TwitchStreamInfo: Being ugly : My Experience, Miramisu is free
Программа "[86488] TwitchPrimeDownloader.exe" завершилась с кодом 0 (0x0).

То есть, деструктор вызывается два раза. Один раз с пустыми полями, второй раз с правильными.
А если убрать строчку

                    streams.Add(streamInfo);

тогда всё правильно. Вызывается один раз. Не пойму, откуда берётся второй экземпляр с пустыми полями :thinking:

А streams это что?

Глобальный List

        public static List<TwitchStreamInfo> streams = new List<TwitchStreamInfo>();

Нашел ошибку. У меня просто в классе FrameStream создавался дополнительный экземпляр. Давно не возвращался к этому проекту. Не помню, зачем я так написал :man_shrugging:
Однако, странно. Если в массиве был не один элемент, а много, то дополнительный экземпляр создавался не каждый раз. Хотя, может это я лог не докручивал :thinking: Или в лог не всё попадало :man_shrugging: