Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Уменьшить объем памяти 
V
    Опции темы
stab
Дата 21.12.2007, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



значит при считывании утечка, следи за потоком данных и смотри что не освобождается. может хэндлы какие потоков\файлов\событий, объёмы утечки как раз таки очень напоминают утечку хэндлов. и код давай. smile


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
CYBERDREAM
Дата 21.12.2007, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 11
Всего: 28



Даю код 
Код

namespace PInvokeExample
{
    using System;
    // Нужно для получения доступа к типан PInvoke
    using System.Runtime.InteropServices;
    using System.Diagnostics;
    using System.Threading;
    using System.Text;
    public class PInvokeClient
    {
        public static IntPtr ptr;

        public static IntPtr _rebootNotification=CreateEvent(IntPtr.Zero, false, false, null);
        public static IntPtr _regulatoryRegionChangeNotification=CreateEvent(IntPtr.Zero, false, false, null);
        public static IntPtr _inventoryNotification=CreateEvent(IntPtr.Zero, false, false, null);

        public static int _rebootResultCode;
        public static int _regulatoryRegionResultCode;
        public static IntPtr _inventoryNtf;//=(IntPtr)Marshal.StructureToPtr(MAPI_DATA_INVENTORY_NTF,0,false);

        [DllImport("libMach1.dll")] 
        public static extern IntPtr MAPI_Connect(string host,int k,ref MAPI_CONNECT_ERROR sl);

        /// <summary>
        /// 
        /// </summary>
        /// <param name="Reader"></param>
        /// <returns></returns>
        [DllImport("libMach1.dll")]
        public static extern MAPI_DATA MAPI_BootModemCmd(IntPtr Reader);
        
        [DllImport("libMach1.dll")]
        public static extern void MAPI_FlushData(IntPtr Reader);
        
        [DllImport("libMach1.dll")]
        public static extern void MAPI_Free(IntPtr mem);

        [DllImport("libMach1.dll",EntryPoint="MAPI_Free")]
        public unsafe static extern void MAPI_Free_(ushort * mem);

        [DllImport("libMach1.dll")]
        public static extern MAPI_DATA MAPI_GetData(IntPtr Reader);

        [DllImport("libMach1.dll")]
        public static extern MAPI_DATA MAPI_SetRegulatoryRegionCmd(IntPtr Reader,ref MAPI_DATA_SET_REGULATORY_REGION_CMD command);

        [DllImport("libMach1.dll")]
        public static extern MAPI_DATA MAPI_InventoryCmd(IntPtr Reader,ref MAPI_DATA_INVENTORY_CMD command);

        [DllImport("my.dll")]
        public static extern void _epc(char[] buffer, IntPtr EPCData, UInt32 EPCLength);

        [DllImport("my.dll")]
        public static extern int Add(int a,int b);

        [DllImport("kernel32.dll",SetLastError=true,ExactSpelling=true)]
        public static extern Int32 WaitForSingleObject(IntPtr handle,Int32 mlsec);

        [DllImport("kernel32.dll")]
        static extern IntPtr CreateEvent(IntPtr lpEventAttributes, bool bManualReset, bool bInitialState, string lpName);

        [DllImport("kernel32.dll")]
        static extern bool SetEvent(IntPtr hEvent);

        static int Main()
        {
            ReaderConnect();
            if(ptr!=IntPtr.Zero)
            {
                Console.Write("Rebooting modem .");
                Thread t = new Thread(new ThreadStart(DataThread));
                if(t==null)
                    Console.WriteLine("Не удалось создать поток");
                t.Start(); 
                BootModem(ptr);
                
                SetRegulatoryRegion(2);
                StartInventory();
                //Console.WriteLine("add = "+Add(2,3));
                epc();
                return 1;
            }
            else
                return 0;
        }
        static int epc()
        {
            int i=0;
            while (ptr!=IntPtr.Zero )
            {

                WaitForSingleObject(_inventoryNotification, 99999);
                //int k=0;
                if (_inventoryNtf!=IntPtr.Zero)
                {
                    //Format the EPC
            
                    //char[] EPCString=new char[24];
                    //string EPCString="";
                    string temp="";
                    MAPI_DATA_INVENTORY_NTF _invent=(MAPI_DATA_INVENTORY_NTF)Marshal.PtrToStructure(_inventoryNtf,typeof(MAPI_DATA_INVENTORY_NTF));
                    unsafe
                    {
                        FormatEPC(ref temp,_invent.Epc,_invent.EpcLen);
                    }
                    MAPI_Free(_inventoryNtf);
                    if(_invent.EpcLen>0)
                    {
                        i++;
                        Console.WriteLine(i+")   antenna {0} >>      EPC: {1}",_invent.Antenna,temp);
                        unsafe
                        {
                            MAPI_Free_(_invent.Epc);
                        }
                        MAPI_Free(_inventoryNtf);
                        _inventoryNtf = IntPtr.Zero;
                    }
                }
            }
            return 0;
        }

        unsafe static void FormatEPC(ref string buffer, ushort * EPCData, UInt32 EPCLength)
        {
            if (0 == EPCLength)
            {
                buffer="Blank EPC";
            }
            else
            {
                UInt32 epcLenIter=0;
                ushort *epcIter = EPCData;
                string[]mas=new string[6];
                char[]m=new char[4];
                //Console.WriteLine("len: "+EPCLength);
                while (epcLenIter < EPCLength)
                {
                    //Console.WriteLine("-->"+String.Format("{0:X}",Int32.Parse(epcIter->ToString())));
                    mas[epcLenIter]=String.Format("{0:X4}",Int32.Parse(epcIter->ToString()));
                    epcLenIter++;
                    epcIter++;
                }
                buffer=mas[0]+"-"+mas[1]+"-"+mas[2]+"-"+mas[3]+"-"+mas[4]+"-"+mas[5];
            }
        }
        static void StartInventory()
        {
            MAPI_DATA_INVENTORY_CMD command=new MAPI_DATA_INVENTORY_CMD();
            MAPI_FlushData(ptr);
            MAPI_DATA response = MAPI_InventoryCmd(ptr, ref command);
            switch (response.Type)
            {
                case MAPI_DATA_TYPE.MAPI_DATA_TYPE_INVALID_COMMAND_NTF:
                {
                    MAPI_DATA_INVALID_COMMAND_NTF invalidCommand = 
                        (MAPI_DATA_INVALID_COMMAND_NTF)Marshal.PtrToStructure(response.Data,typeof(MAPI_DATA_INVALID_COMMAND_NTF));
                    Console.WriteLine("Received Invalid Command Notification while starting inventory\n");
                    Console.WriteLine("Reason Code = {0}, Reader State = {1}\n",invalidCommand.ReasonCode, invalidCommand.State);
                    //MAPI_Free(invalidCommand);
                    //exit(1);
                    break;
                }
                case MAPI_DATA_TYPE.MAPI_DATA_TYPE_INVENTORY_RSP:
                {
                    MAPI_DATA_INVENTORY_RSP inventoryResponse = 
                        (MAPI_DATA_INVENTORY_RSP)Marshal.PtrToStructure(response.Data,typeof(MAPI_DATA_INVENTORY_RSP));
                    byte resultCode = inventoryResponse.ResultCode;
                    //MAPI_Free(inventoryResponse);
                    if (0 != resultCode)
                    {
                        Console.WriteLine("Failed to start Inventory- Result Code = %d\n",resultCode);
                        //exit(1);
                        
                    }
                    break;
                }
            }
        }
        public static void BootModem(IntPtr ptr)
        {
            MAPI_FlushData(ptr);
            MAPI_DATA response=MAPI_BootModemCmd(ptr);
            MAPI_Free(response.Data);
            bool bootComplete = false;

            while(!bootComplete)
            {
                WaitForSingleObject(_rebootNotification,99999);
                //Console.WriteLine("-->>>WaitForSingleObject in BootModem is Complete");
                switch (_rebootResultCode)
                {
                    
                    case 0:
                    {
                        Console.Write("\nModem reboot successful\n");
                        bootComplete = true;
                        break;
                    }
                    case 1: //Boot in progress
                    {
                        Console.WriteLine("~"); //print out a dot to show boot progress
                        break;
                    }
                    case 2:
                    {
                        Console.WriteLine("Modem reboot failed: Invalid Firmware\n");
                        break;
                    }
                    case 3:
                    {
                        Console.WriteLine("Modem reboot failed: Hardware communication timeout\n");
                        break;
                    }
                    case 4:
                    {
                        Console.WriteLine("Modem reboot failed: Boot failed due to unknown hardware\n");
                        break;
                    }
                    default:
                    {
                        Console.WriteLine("Modem reboot failed: unspecified error code {0}",_rebootResultCode);
                        break;
                    }
                }
                if (0 != _rebootResultCode && 1 !=_rebootResultCode) 
                    Console.WriteLine("exit");
                //exit;    //exit if we have failed reboot

            }
        }
        static void DataThread()
        {
            while(ptr!=IntPtr.Zero)
            {
                MAPI_DATA ReturnedData = MAPI_GetData(ptr);
                //ReturnedData.Data=new IntPtr(3690448);
                switch(ReturnedData.Type)
                {
                    case MAPI_DATA_TYPE.MAPI_DATA_TYPE_BOOT_MODEM_NTF:
                    {
                        MAPI_DATA_BOOT_MODEM_NTF bootModemNtf=(MAPI_DATA_BOOT_MODEM_NTF)Marshal.PtrToStructure(ReturnedData.Data,typeof(MAPI_DATA_BOOT_MODEM_NTF));
                        
                        //save the reboot command result code
                        int _rebootResultCode = bootModemNtf.BootResultCode;
                        //Console.WriteLine("Code - > "+_rebootResultCode.ToString());
                        if (1 == _rebootResultCode)
                            Console.Write("."); //print a progress dot
                        else
                        {
                            SetEvent(_rebootNotification);
                            //ptr = IntPtr.Zero;
                            //Console.WriteLine("Закончили выполнять перезагрузку");
                        }
                        break;
                    }

                    case MAPI_DATA_TYPE.MAPI_DATA_TYPE_INVENTORY_NTF:
                    {
                        _inventoryNtf = ReturnedData.Data;
                        SetEvent(_inventoryNotification);
                        break;
                    }

                        /////////////////////////////////////////////////////
                        // Received Set Regulatory Region result notification
                        /////////////////////////////////////////////////////
                    case MAPI_DATA_TYPE.MAPI_DATA_TYPE_SET_REGULATORY_REGION_NTF:
                    {        
                        //Console.WriteLine("Free");
                        MAPI_DATA_SET_REGULATORY_REGION_NTF data=
                            (MAPI_DATA_SET_REGULATORY_REGION_NTF)Marshal.PtrToStructure(ReturnedData.Data,typeof(MAPI_DATA_SET_REGULATORY_REGION_NTF));

                        //data = (MAPI_DATA_SET_REGULATORY_REGION_NTF *)ReturnedData.Data;
            
                        //save the regulatory change request result code
                        int _regulatoryRegionResultCode = data.ResultCode;
                        //Free the returned data
                        MAPI_Free(ReturnedData.Data);
                        SetEvent(_regulatoryRegionChangeNotification);
                        break;
                    }

                        ////////////////////////////////////////////////////////
                        // Received Reader connection termination
                        ////////////////////////////////////////////////////////
                    case MAPI_DATA_TYPE.MAPI_DATA_TYPE_EMPTY:
                    {
                        Console.WriteLine("Data thread terminiating due to DLL Notification.\n");
                        //null out the reader handle- it's no longer valid
                        ptr = IntPtr.Zero;
                        break;
                    }
                    default:
                    {
                        if (ReturnedData.Data==IntPtr.Zero) 
                            MAPI_Free(ReturnedData.Data);
                        break;
                    }
                }
            }
            //AfxEndThread(0);
            //Notify thread is ending
            //SetEvent(_hDataThread->m_hThread);
            //return 0;
        }

        static void ReaderConnect()
        {
            MAPI_CONNECT_ERROR connectResult=new MAPI_CONNECT_ERROR();
            //Connect to Speedway Reader
            string _readerHost = "192.168.127.22";
            Console.WriteLine(_readerHost);
            //READER _reader=new READER();// = MAPI_Connect(_readerHost,0,ref connectResult);
            

            ptr=MAPI_Connect(_readerHost,0,ref connectResult);
            if(ptr==IntPtr.Zero)
            {
                Console.WriteLine("Подключение к считывателю не удалось");
                Console.WriteLine("Failed to connect Speedway Reader {0}",_readerHost);
                switch(connectResult.ErrorType)
                {
                    case MAPI_CONNECT_ERROR_TYPE.MAPI_CONNECT_ERROR_ADDRESS:
                    {
                        Console.WriteLine("The address is not valid.\n");
                        break;
                    }
                    case MAPI_CONNECT_ERROR_TYPE.MAPI_CONNECT_ERROR_CONNECTION:
                    {
                        Console.WriteLine("A connection could not be established.\n");
                        break;
                    }
                    case MAPI_CONNECT_ERROR_TYPE.MAPI_CONNECT_ERROR_BUSY_UNKNOWN:
                    {
                        Console.WriteLine("The Reader is currently busy with another unknown client.\n");
                        break;
                    }
                    case MAPI_CONNECT_ERROR_TYPE.MAPI_CONNECT_ERROR_BUSY_KNOWN:
                    {
                        Console.WriteLine("The Reader is currently busy with another known client.\n");
                        break;
                    }
                    default:
                    {
                        Console.WriteLine("Error code %d received.\n", connectResult.ErrorType);
                        break;
                    }
                }
            }
            else
            {
                Console.WriteLine("1>>Подключение к считывателю прошло успешно\n");
            }
        }
        static void SetRegulatoryRegion(short regulatoryRegion)
        {
            MAPI_FlushData(ptr);

            //Create the command structure and clear the memory
            MAPI_DATA_SET_REGULATORY_REGION_CMD command=new MAPI_DATA_SET_REGULATORY_REGION_CMD();
            //memset(ref command, 0,sizeof(command));

            //Set the required parameter
            command.RegulatoryRegion = regulatoryRegion;
            
            //Call the Reader and get the Response
            MAPI_DATA response=MAPI_SetRegulatoryRegionCmd(ptr,ref command);

            //Check for an Invalid Command Notification
            switch (response.Type)
            {
                case MAPI_DATA_TYPE.MAPI_DATA_TYPE_SET_REGULATORY_REGION_RSP:
                {    
                    IntPtr setRegulatoryRegionRsp = response.Data;
                    MAPI_DATA_SET_REGULATORY_REGION_RSP _setRegulatoryRegionRsp=(MAPI_DATA_SET_REGULATORY_REGION_RSP)Marshal.PtrToStructure(setRegulatoryRegionRsp,typeof(MAPI_DATA_SET_REGULATORY_REGION_RSP));
                    byte resultCode = _setRegulatoryRegionRsp.ResultCode;
                    MAPI_Free(setRegulatoryRegionRsp);
                    if (resultCode != 0)
                    {
                        Console.WriteLine("Regulatory Region {0} not supported. Result Code: {1}",regulatoryRegion, resultCode);
                        //return 0;
                    }
                    break;
                }
                case MAPI_DATA_TYPE.MAPI_DATA_TYPE_INVALID_COMMAND_NTF:
                {
                    IntPtr invalidCommand = response.Data;
                    MAPI_DATA_INVALID_COMMAND_NTF _invalidCommand=(MAPI_DATA_INVALID_COMMAND_NTF)Marshal.PtrToStructure(invalidCommand,typeof(MAPI_DATA_INVALID_COMMAND_NTF));
                    Console.WriteLine("Received Invalid Command Notification while setting regulatory Region {0}\n", regulatoryRegion);
                    Console.WriteLine("Reason Code = {0}, Reader State = {1}\n",_invalidCommand.ReasonCode , _invalidCommand.State);
                    MAPI_Free(invalidCommand);
                    //return 0;
                    break;
                }
                case MAPI_DATA_TYPE.MAPI_DATA_TYPE_EMPTY:
                {
                    Console.WriteLine("Received reader disconnect message while setting Regulatory Region\n");
                    //return 0;
                    break;
                }
                case MAPI_DATA_TYPE.MAPI_DATA_TYPE_SYSTEM_ERROR_NTF:
                {
                    IntPtr systemErrNtf=response.Data;
                    //MAPI_DATA_SYSTEM_ERROR_NTF *systemErrNtf = (MAPI_DATA_SYSTEM_ERROR_NTF *)response.Data;
                    MAPI_DATA_SYSTEM_ERROR_NTF _systemErrNtf=(MAPI_DATA_SYSTEM_ERROR_NTF)Marshal.PtrToStructure(systemErrNtf,typeof(MAPI_DATA_SYSTEM_ERROR_NTF));
                    Console.WriteLine("Received System Error while setting regulatory Region %d\n", regulatoryRegion);
                    Console.WriteLine("Error Code %d, reason %d", _systemErrNtf.ErrorCode, _systemErrNtf.SystemErrorReason);
                    MAPI_Free(systemErrNtf);
                    //return 0;
                    break;
                }
                default:
                {
                    Console.WriteLine("Unexpected response received from Reader when setting Regulatory Region. Message Type %d\n", response.Type);
                    //return 0;
                    break;
                }
            }


            WaitForSingleObject(_regulatoryRegionChangeNotification,99999);
            switch(_regulatoryRegionResultCode)
            {
                case 0: 
                {
                    Console.WriteLine("Regulatory Region Set Successfully\n");
                    break;
                }
                case 1:
                {
                    Console.WriteLine("Regulatory Region not set- no valid regulatory calibration\n");
                    break;
                }
                case 2:
                {
                    Console.WriteLine("Regulatory Region not set- error setting regulatory region\n");
                    break;
                }
                default:
                {
                    Console.WriteLine("Regulatory Region not set- unspecified error %d\n",_regulatoryRegionResultCode);
                    break;
                }
            }
            if (0 != _regulatoryRegionResultCode) 
                Console.WriteLine("Exit immediately if failed setting regulatory region\nВыход из регулировки");

        }

    }
}

Проверить увы смогу лишь на работе в понедельник если что. Домой девайс тащить гиблое дело smile 



--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
mr.DUDA
Дата 21.12.2007, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



CYBERDREAM, мемори профайлером ты давно бы уже нашёл где "течёт" память...  smile 


--------------------
user posted image
PM MAIL WWW   Вверх
stab
Дата 21.12.2007, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



ужос. smile  ты уверен что утечка не в libMach1.dll?


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
CYBERDREAM
Дата 22.12.2007, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 11
Всего: 28



stab : возможно там и есть утечка эта. Но если так, то проблему уже не решить по ходу. 

Mr. Duda пока не разрулил с профайлером, на выходных поштудирую что к чему, авось поможет


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
CYBERDREAM
Дата 24.12.2007, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 11
Всего: 28



Убрал  SetProcessWorkingSetSize. 
Как ни странно, но когда объем занимаемой прогой памяти доходит до 21-22 метрах ( по крайней мере при нынешних настройках) сбрасывается до 12 и т.д. а бывает и раньше. Вообщем пока неясно, когда он освобождает ресурсы и какие
Но это только если запускать из Memory Profiler'a


Это сообщение отредактировал(а) CYBERDREAM - 24.12.2007, 11:35


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
CYBERDREAM
Дата 24.12.2007, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 11
Всего: 28



Не знаю глюк мой, или бывают еще такие случаи, но факт остается фактом.
Если свернуть окно (в котором происходит считывание и вывод всех меток ) то размер выделяемой памяти доходит до 1,5-2,5 мегабайт!!!!! ну и дальше прирост происходит. Если развернуть то сразу прибавляется 1метр ну а дальше прирост. Вообщем сворачиваением можно сказать происходит сбор мусора, но не приятный способ конечно. 
   Кто то сталкивался с подобным? smile 


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
stab
Дата 24.12.2007, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



при сворачивании как раз происходит SetProcessWorkingSetSize, в майкрософте раньше думали, что раз свернул, то на скорость исполнения задачи пофик и можно освободить память, с приходом висты всё изменилось - память больше не ресурс, память - это кэш.  smile 

Цитата(CYBERDREAM @  24.12.2007,  14:47 Найти цитируемый пост)
Как ни странно, но когда объем занимаемой прогой памяти доходит до 21-22 метрах ( по крайней мере при нынешних настройках) сбрасывается до 12

ну вот значит и отлично всё, команда асинизаторов делает своё грязное дело.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
CYBERDREAM
Дата 24.12.2007, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 11
Всего: 28



Цитата(stab @ 24.12.2007,  13:03)
при сворачивании как раз происходит SetProcessWorkingSetSize, в майкрософте раньше думали, что раз свернул, то на скорость исполнения задачи пофик и можно освободить память, с приходом висты всё изменилось - память больше не ресурс, память - это кэш.  smile 

Цитата(CYBERDREAM @  24.12.2007,  14:47 Найти цитируемый пост)
Как ни странно, но когда объем занимаемой прогой памяти доходит до 21-22 метрах ( по крайней мере при нынешних настройках) сбрасывается до 12

ну вот значит и отлично всё, команда асинизаторов делает своё грязное дело.

в случае падения до 12 метров, я оказывается тогда тоже сворачивал окошко  smile Тобишь пока только через SetProcessWorkingSetSize получается упаковать размерчик.
Команда асинизаторов - это что и для чего хотелось бы узнать.  smile 
В присоединенном файле - скрин с профайлера


Это сообщение отредактировал(а) CYBERDREAM - 24.12.2007, 14:02

Присоединённый файл ( Кол-во скачиваний: 27 )
Присоединённый файл  ScreenShot.JPG 35,36 Kb


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
mr.DUDA
Дата 24.12.2007, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Вертикальные полоски на скрине - это сборки мусора (ассенизаторы smile). Цифрой наверху показано поколение, для которого собирается мусор.


--------------------
user posted image
PM MAIL WWW   Вверх
CYBERDREAM
Дата 25.12.2007, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 11
Всего: 28



Всем спасибо. Пока что обойдусь с помощью
Код

    System.Diagnostics.Process mainProc=System.Diagnostics.Process.GetCurrentProcess();
    mainProc.MinWorkingSet=-1;
    mainProc.MaxWorkingSet=-1;

Кстати, если считыватель не видит в своем окружении никаких меток, то память не растет. smile 


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
Bladerender
Дата 23.5.2009, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



попробуй делать считывание информации в Queue<T>. У нее есть два чудестных метода Enqueue() and Dequeue(). Поток, который тянет информацию вкидает эту информацию порциями (обьектами) в очередь. А метод, который что-то с этими данными что-то делает, запускай в паралельном потоке. Как только метод сделает деквае следующей порции инфы и метод обработки этих данных завершиться, ссылка на эту порцию данных пропадет и сборщик соберет ее в удобное для него время. 

                   свалка для сборщика                                                         Queue<T>
              /               ^ [1]              /     <------[2]-------- Dequeue() --- |   [3][4][5]    |       <---[6]------- Enqueue()



Это должно помочь.

Это сообщение отредактировал(а) Bladerender - 23.5.2009, 10:05
PM MAIL   Вверх
PashaPash
Дата 23.5.2009, 12:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 13
Всего: 49



Bladerender, попробуй смотреть на даты сообщений.


--------------------
PM MAIL WWW   Вверх
Bladerender
Дата 23.5.2009, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



 smile  smile  smile  smile  smile Жесть. А как же она попала на первую страницу ??  smile  smile  smile  smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0935 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.