Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Godot;
- using System;
- using System.Collections.Generic;
- namespace Game;
- public partial class Main : Node2D
- {
- #region timer
- private ulong _time;
- private void TimeStart()
- {
- _time = Time.GetTicksUsec();
- }
- private string TimeStop(string prefix = "")
- {
- string Reverse(string s)
- {
- char[] chars = s.ToCharArray();
- Array.Reverse(chars);
- return new string(chars);
- }
- string Parse(string s, bool isReverse)
- {
- if (isReverse)
- s = Reverse(s);
- var r = new List<string>();
- for (int i = 0; i < s.Length; i++)
- {
- if (i % 3 == 0 && i != 0)
- r.Add("_");
- r.Add(s[i].ToString());
- }
- if (isReverse)
- r.Reverse();
- return string.Join("", r);
- }
- double elapsed = (double)(Time.GetTicksUsec() - _time) / 1_000_000.0;
- string t = elapsed.ToString();
- if (t == "0")
- t += ",0";
- string[] parts = t.Split(',');
- return prefix
- + Parse(parts[0], true)
- + "."
- + Parse(parts[1], false);
- }
- #endregion
- private int once = 0;
- private int count = 100_000;
- private int sizeArr = 50;
- private int[] keyDel = [12, 24, 9, 15, 21];
- private List<int> list = [];
- private Godot.Collections.Array<int> godotList = [];
- public override void _Ready()
- {
- for (int i = 0; i < sizeArr; i++)
- {
- list.Add(i);
- godotList.Add(i);
- }
- }
- public override void _Process(double delta)
- {
- once++;
- if (once == 120)
- {
- TestRawRemoveGodotList();
- TestRawRemove();
- TestSwap();
- Info();
- }
- }
- private void Info()
- {
- GD.Print();
- GD.Print($"Кол-во итераций: {count}");
- GD.Print($"Размер массива: {sizeArr}");
- }
- public class SwapRemover
- {
- private int _size;
- private List<int> _arr;
- public void Setup(List<int> arr)
- {
- _arr = arr;
- _size = arr.Count;
- }
- public void Remove(int index)
- {
- _size--;
- _arr[index] = _arr[_size];
- }
- public void Add(int value)
- {
- if (_size < _arr.Count)
- _arr[_size] = value;
- else
- _arr.Add(value);
- _size++;
- }
- }
- private void TestRawRemove()
- {
- List<int> arr = [.. list];
- TimeStart();
- for (int i = 0; i < count; i++)
- {
- for (int k = 0; k < keyDel.Length; k++)
- {
- arr.RemoveAt(keyDel[k]);
- arr.Add(keyDel[k]);
- }
- }
- GD.Print(TimeStop("RAW_REMOVE C# List\t\t"));
- }
- private void TestSwap()
- {
- var arr = new SwapRemover();
- arr.Setup([.. list]);
- TimeStart();
- for (int i = 0; i < count; i++)
- {
- for (int k = 0; k < keyDel.Length; k++)
- {
- arr.Remove(keyDel[k]);
- arr.Add(keyDel[k]);
- }
- }
- GD.Print(TimeStop("SWAP C#\t\t\t\t\t"));
- }
- private void TestRawRemoveGodotList()
- {
- var arr = godotList.Duplicate();
- TimeStart();
- for (int i = 0; i < count; i++)
- {
- for (int k = 0; k < keyDel.Length; k++)
- {
- arr.RemoveAt(keyDel[k]);
- arr.Add(keyDel[k]);
- }
- }
- GD.Print(TimeStop("RAW_REMOVE Godot List\t"));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment