Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
  • Help Room /
avatar image
0
Question by jisheng · Sep 09, 2015 at 06:53 PM · assetbundlememorymemory-leakunloadgc

assetBundle memory can not be free

I have a problem when loading the assetBundle by myself.i found the memory can not be free,my unity version is 5.1.2

The code is very simple.What the code do is just to load and unload 100 assetsbundles that has no dependce with each other.All the assetbundles in the memory will cost 115M.When i just open the app with doing nothing,the app's total memory is 30M.When i use function1 to load and unload 100 assetbundles ,the memroy will back to be 30M,but when i use funtion 2 which is exactly will be used in my real project,the memroy will growth to be 70M

function1:

 //-------------------------------------------------------------before 30M
 public void LoadAndUnload()
     {
         foreach (var file in files)
         {
             byte[] bytes = LoadFromCacheDirect(file);
             AssetBundle assetBundle = AssetBundle.CreateFromMemoryImmediate(bytes);
             assetBundle.Unload(false);
         }
         //Resources.UnloadUnusedAssets(); do or do not ,there is no use
         GC.Collect();
     }
 //---------------------------------------------------------------after 30M

in the function1 ,i call the "assetBundle.Unload" function when the assetBundle just be created. After this function,the assetbundle memory will be all free.

function2:

 //-------------------------------------------------------------before 30M
     public void LoadAllAndUnload()
         {
             foreach (var file in files)
             {
                 byte[] bytes = LoadFromCacheDirect(file);
                 AssetBundle assetBundle = AssetBundle.CreateFromMemoryImmediate(bytes);
                 abs.Add(file, assetBundle);
             }
 //-------------------------------------------------------------middle 115M
             foreach (var rr in abs)
             {
                 var assetBundle = rr.Value;
                 if (assetBundle != null)
                 {
                     assetBundle.Unload(false);
                 }
             }
             //Resources.UnloadUnusedAssets(); do or do not ,there is no use
             GC.Collect();
         }
 //-------------------------------------------------------------after 70M

in the function2 ,I stored the assetbundle in the dictionary "abs" when it just be created.when all the 100 assetbundles be stored,i iteartor the dictionary and call the "assetBundle.Unload"function one by one.but only part of the memory will be free after function2.

I have tried many ways but still can't found how to free the memory.the profiler shows there is no webStreams ,no serialized file , no asset in the memory after call funtion2,I'am lost!Please help~

Comment
Add comment · Show 2
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image jisheng · Sep 09, 2015 at 08:39 AM 0
Share

the test platform is android

avatar image jisheng · Sep 09, 2015 at 03:48 PM 0
Share

I have solved the problem,the reason why there will be some memory can not be free,it's unity do it,these memory will be used again when i load some more assets,it's not a memory leak~

0 Replies

· Add your reply
  • Sort: 

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

2 People are following this question.

avatar image avatar image

Related Questions

Application crashes when loading multiple assetbundle,loading multiple assetbundle causes crash with memory warning 0 Answers

On iOS platform, my application take about 900MB of memory at startup for some seconds 0 Answers

Need help with memory management 0 Answers

What is the correct way to store circular references in Unity? 1 Answer

How to correctly utilise AssetBundles - Massive memory usage, 4x more than Resource folder 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges