Add memory management code
authorJongkyu Koo <jk.koo@samsung.com>
Wed, 12 Apr 2017 07:37:39 +0000 (16:37 +0900)
committerJongkyu Koo <jk.koo@samsung.com>
Thu, 13 Apr 2017 00:11:33 +0000 (09:11 +0900)
Change-Id: I88fbdadc3414934c27561cb451c062cc9a004759
Signed-off-by: Jongkyu Koo <jk.koo@samsung.com>
src/Tizen.Pims.Contacts/Tizen.Pims.Contacts/ContactsList.cs
src/Tizen.Pims.Contacts/Tizen.Pims.Contacts/ContactsRecord.cs
src/Tizen.Pims.Contacts/Tizen.Pims.Contacts/ContactsViews.cs

index 2f9a605..a479168 100644 (file)
@@ -22,10 +22,21 @@ namespace Tizen.Pims.Contacts
     /// </summary>
     public class ContactsList:IDisposable
     {
+        private Int64 _memoryPressure = 20;
         internal IntPtr _listHandle;
         internal ContactsList(IntPtr handle)
         {
+            int count;
+
             _listHandle = handle;
+            int error = Interop.List.ContactsListGetCount(_listHandle, out count);
+            if ((int)ContactsError.None != error)
+            {
+                Log.Error(Globals.LogTag, "ContactsList Failed with error " + error);
+                throw ContactsErrorFactory.CheckAndCreateException(error);
+            }
+            _memoryPressure += count * ContactsViews.AverageSizeOfRecord;
+            GC.AddMemoryPressure(_memoryPressure);
         }
 
         /// <summary>
@@ -39,6 +50,7 @@ namespace Tizen.Pims.Contacts
                 Log.Error(Globals.LogTag, "ContactsList Failed with error " + error);
                 throw ContactsErrorFactory.CheckAndCreateException(error);
             }
+            GC.AddMemoryPressure(_memoryPressure);
         }
 
         ~ContactsList()
@@ -57,7 +69,7 @@ namespace Tizen.Pims.Contacts
                 int error = Interop.List.ContactsListGetCount(_listHandle, out count);
                 if ((int)ContactsError.None != error)
                 {
-                    Log.Error(Globals.LogTag, "ContactsList Failed with error " + error);
+                    Log.Error(Globals.LogTag, "ContactsList Count Failed with error " + error);
                     throw ContactsErrorFactory.CheckAndCreateException(error);
                 }
                 return count;
@@ -79,6 +91,7 @@ namespace Tizen.Pims.Contacts
                 }
 
                 disposedValue = true;
+                GC.RemoveMemoryPressure(_memoryPressure);
             }
         }
 
@@ -101,6 +114,7 @@ namespace Tizen.Pims.Contacts
                 throw ContactsErrorFactory.CheckAndCreateException(error);
             }
             record._disposedValue = true;
+            _memoryPressure += ContactsViews.AverageSizeOfRecord;
         }
 
         /// <summary>
@@ -116,6 +130,7 @@ namespace Tizen.Pims.Contacts
                 throw ContactsErrorFactory.CheckAndCreateException(error);
             }
             record._disposedValue = false;
+            _memoryPressure -= ContactsViews.AverageSizeOfRecord;
         }
 
         /// <summary>
index 8290473..038c8bd 100644 (file)
@@ -26,6 +26,7 @@ namespace Tizen.Pims.Contacts
     {
         private string _uri = null;
         private uint _id;
+        private Int64 _memoryPressure = ContactsViews.AverageSizeOfRecord;
         internal IntPtr _recordHandle;
 
         internal ContactsRecord(IntPtr handle)
@@ -38,6 +39,7 @@ namespace Tizen.Pims.Contacts
                 Log.Error(Globals.LogTag, "ContactsRecord Failed with error " + error);
                 throw ContactsErrorFactory.CheckAndCreateException(error);
             }
+            GC.AddMemoryPressure(_memoryPressure);
             _uri = Marshal.PtrToStringAnsi(viewUri);
         }
 
@@ -52,6 +54,9 @@ namespace Tizen.Pims.Contacts
                 Log.Error(Globals.LogTag, "ContactsRecord Failed with error " + error);
                 throw ContactsErrorFactory.CheckAndCreateException(error);
             }
+
+            if (!_disposedValue)
+                GC.AddMemoryPressure(_memoryPressure);
             _uri = Marshal.PtrToStringAnsi(viewUri);
         }
 
@@ -67,6 +72,7 @@ namespace Tizen.Pims.Contacts
                 throw ContactsErrorFactory.CheckAndCreateException(error);
             }
             _uri = Marshal.PtrToStringAnsi(viewUri);
+            GC.AddMemoryPressure(_memoryPressure);
         }
 
         /// <summary>
@@ -82,6 +88,7 @@ namespace Tizen.Pims.Contacts
                 throw ContactsErrorFactory.CheckAndCreateException(error);
             }
             _uri = viewUri;
+            GC.AddMemoryPressure(_memoryPressure);
         }
 
         ~ContactsRecord()
@@ -113,8 +120,8 @@ namespace Tizen.Pims.Contacts
                     Log.Error(Globals.LogTag, "Dispose Failed with error " + error);
                     throw ContactsErrorFactory.CheckAndCreateException(error);
                 }
-
                 _disposedValue = true;
+                GC.RemoveMemoryPressure(_memoryPressure);
             }
         }
 
index 49ec798..c9cbeb3 100644 (file)
@@ -390,6 +390,8 @@ namespace Tizen.Pims.Contacts
             Deleted,
         }
 
+        internal const uint AverageSizeOfRecord = 120; ///average size of person record
+
         public static class Addressbook
         {
             /// <summary>