DynamicHeapAllocator allocation probe 1 failed - Could not get memory for large allocation 1008124.

My program has been running on the computer for two years without any problems. Recently, the following error occurred:

error.log:

Unity Player [version: Unity 5.6.0f3_497a0f351392]

DJ_VR v13.1_PC.exe caused an Access Violation (0xc0000005)
in module DJ_VR v13.1_PC.exe at 0033:a392c976.

Error occurred at 2019-12-02_083458.
D:\DJ_VR v13.1_PC\DJ_VR v13.1_PC.exe, run by VR01.
36% memory in use.
16286 MB physical memory [10299 MB free].
45238 MB paging file [6 MB free].
134217728 MB user address space [134217101 MB free].
Read from location 00000010 caused an access violation.

output_log.txt:

Initialize engine version: 5.6.0f3 (497a0f351392)
GfxDevice: creating device client; threaded=1
Direct3D:
Version: Direct3D 11.0 [level 11.1]
Renderer: NVIDIA GeForce GTX 1060 6GB (ID=0x1c03)
Vendor: NVIDIA
VRAM: 6055 MB
Driver: 23.21.13.9125
DynamicHeapAllocator allocation probe 1 failed - Could not get memory for large allocation 1008124.
DynamicHeapAllocator allocation probe 2 failed - Could not get memory for large allocation 1008124.
DynamicHeapAllocator allocation probe 3 failed - Could not get memory for large allocation 1008124.
DynamicHeapAllocator allocation probe 4 failed - Could not get memory for large allocation 1008124.
DynamicHeapAllocator out of memory - Could not get memory for large allocation 1008124!
Crash!!!

5234711–522281–output_log.txt (4.98 KB)


Microsoft Windows Tip:
Close the program to prevent information loss
The computer is out of memory.Save the file and close these programs:
DJ_VR v13.1_PC

Does anyone know how to solve it?Thanks!

According to the log, it is concluded that it flashes back when the LoadAsset interface of AssetBundle is called.

The resource download function is done in the game: the resources are made into AssetBundles and placed in the cloud. When the client runs the game, the AssetBundles are downloaded from the cloud to the local, and then the resources are loaded from the local.

What is the problem with this process?
Suppose we have a resource bundle: test.ab, we put it in the cloud, the client downloads it locally and loads the AssetBundle; then we modify the resources in the project, re-type test.ab and put it in the cloud, the game client If the download of test.ab is triggered without restarting, the test.ab in the local disk will be overwritten, which causes the AssetBundle object previously loaded into the memory to not correspond to the AssetBundle file on the disk. If At this time, calling the LoadAsset interface will cause invalid memory access, resulting in a flashback.

According to the analysis, the solution is to execute LoadAllAssetsAsync to load all Assets after loading the AssetBundle object for the first time, so as to avoid invalid memory access of LoadAsset due to resource overwriting download.

6741043--776845--upload_2021-1-19_19-3-0.png