Added calls to GC.AddMemoryPressure() when unmanaged memory is allocated for ODE (helps the GC make better scheduling choices), and a call to GC.Collect() right before logins are enabled for a region. Although this doesn't change actual memory usage, it improves the reported usage from OpenSim and the operating system
							parent
							
								
									428bd7a74b
								
							
						
					
					
						commit
						119cf80e13
					
				| 
						 | 
				
			
			@ -1107,6 +1107,11 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
                    }
 | 
			
		||||
                    if (loginsdisabled && (m_frame > 20))
 | 
			
		||||
                    {
 | 
			
		||||
                        // In 99.9% of cases it is a bad idea to manually force garbage collection. However,
 | 
			
		||||
                        // this is a rare case where we know we have just went through a long cycle of heap
 | 
			
		||||
                        // allocations, and there is no more work to be done until someone logs in
 | 
			
		||||
                        GC.Collect();
 | 
			
		||||
 | 
			
		||||
                        m_log.Debug("[REGION]: Enabling Logins");
 | 
			
		||||
                        loginsdisabled = false;
 | 
			
		||||
                    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -174,6 +174,9 @@ namespace OpenSim.Region.Physics.Meshing
 | 
			
		|||
 | 
			
		||||
            float[] result = getVertexListAsFloat();
 | 
			
		||||
            m_pinnedVertexes = GCHandle.Alloc(result, GCHandleType.Pinned);
 | 
			
		||||
            // Inform the garbage collector of this unmanaged allocation so it can schedule
 | 
			
		||||
            // the next GC round more intelligently
 | 
			
		||||
            GC.AddMemoryPressure(Buffer.ByteLength(result));
 | 
			
		||||
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -223,6 +226,9 @@ namespace OpenSim.Region.Physics.Meshing
 | 
			
		|||
        
 | 
			
		||||
            int[] result = getIndexListAsInt();
 | 
			
		||||
            m_pinnedIndex = GCHandle.Alloc(result, GCHandleType.Pinned);
 | 
			
		||||
            // Inform the garbage collector of this unmanaged allocation so it can schedule
 | 
			
		||||
            // the next GC round more intelligently
 | 
			
		||||
            GC.AddMemoryPressure(Buffer.ByteLength(result));
 | 
			
		||||
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue