У меня есть приложение unity, которое должно было быть сделано в winforms, но я использовал unity, b c. Приложение загружает внешние изображения, если они существуют. проблема в том, что Unity использует все больше и больше оперативной памяти, пока не выйдет из строя. Я знаю это изображения, потому что я добавил функцию отключения загрузки изображений, и это устранило проблему, мне нужна помощь, чтобы мое приложение перестало использовать так много оперативной памяти !!
вот код, который я использовал, ( это все не мое)
StartCoroutine("FindImage");
public IEnumerator FindImage()
{
var a = FolderLocationPath;
/*
while (!Main.EnableSelected)
{
yield return new WaitForSeconds(0.1f);
}*/
try
{
ModViewImage.sprite = LoadNewSprite(a + @"\preview.jpg");
}
catch
{
try
{
ModViewImage.sprite = LoadNewSprite(a + @"\preview.png");
}
catch
{
Debug.LogWarning("--No-Image--" + a.Replace(Main.GetMain.FolderPath, ""));
}
}
yield return null;
}
public Sprite LoadNewSprite(string FilePath, float PixelsPerUnit = 0.01f)
{
// Load a PNG or JPG image from disk to a Texture2D, assign this texture to a new sprite and return its reference
Texture2D SpriteTexture = LoadTexture(FilePath);
Sprite NewSprite = Sprite.Create(SpriteTexture, new Rect(0, 0, SpriteTexture.width, SpriteTexture.height), new Vector2(0, 0), PixelsPerUnit);
return NewSprite;
}
public Texture2D LoadTexture(string FilePath)
{
// Load a PNG or JPG file from disk to a Texture2D
// Returns null if load fails
Texture2D Tex2D;
byte[] FileData;
if (System.IO.File.Exists(FilePath))
{
FileData = System.IO.File.ReadAllBytes(FilePath);
Tex2D = new Texture2D(1, 1); // Create new "empty" texture
if (Tex2D.LoadImage(FileData))
{
Tex2D.anisoLevel = 1;
Tex2D.filterMode = FilterMode.Point;
Tex2D.Apply();
return Tex2D;
} // If data = readable -> return texture
}
return null; // Return null if load failed
}