Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.11.29;
Скачать: [xml.tar.bz2];

Вниз

Сработало исключение EOutOfMemory: как оптимизировать память?   Найти похожие ветки 

 
yantux ©   (2009-10-12 10:31) [0]

Во время выполнения программы сработало исключение EOutOfMemory.
Полагаю это благодаря активному использованию памяти с помощью безразмерных массивов, длина которых задаётся с помощью setlength();

Постоянно сообщения, что у виндоуса мало виртуальной памяти.
Как можно оптимизировать, уменьшить использование памяти, чтобы программа после использования памяти возращала её системе?


 
brother ©   (2009-10-12 10:35) [1]

без бутылки не поймешь, код нужен...


 
RWolf ©   (2009-10-12 10:36) [2]

Программа на D7 самодеятельностью в плане выделения памяти не занимается, ищите утечку.


 
brother ©   (2009-10-12 10:37) [3]

имхо не утечка там, а реально много выделено)


 
yantux ©   (2009-10-12 10:43) [4]

Я использую только безразмерный массив и setlength() для его инициализации, ни каких malloc() и им подобных.

Я так понимаю, если делаю setlength(a,100), то программа запросит у ОС память на сто элементов.

Как можно заставить программу возвращать память ОС? Если я сделаю setlength(a,1), то программа вернёт ОС память, которую занимали 99 эелементов?

У меня 256Мб, ХР, D7.


 
brother ©   (2009-10-12 10:48) [5]

> Если я сделаю setlength(a,1), то программа вернёт ОС память,
> которую занимали 99 эелементов?

да


 
brother ©   (2009-10-12 10:48) [6]

> setlength(a,100),

но как описана a ?


 
yantux ©   (2009-10-12 10:51) [7]

> но как описана a ?

record


 
brother ©   (2009-10-12 10:51) [8]

ты партизан?
полностью описание рекорда приведи


 
brother ©   (2009-10-12 10:52) [9]

или мы должны гдать размер одного элемента... ибо 100 непонятно чего жрет 240 мб оперативы?


 
yantux ©   (2009-10-12 10:54) [10]

> или мы должны гдать размер одного элемента... ибо 100 непонятно чего жрет 240 мб оперативы?

растровые фотки их обработка


 
brother ©   (2009-10-12 10:54) [11]

если хочешь партизанить - не получишь ответ на сабж...


 
brother ©   (2009-10-12 10:55) [12]

ошибка в 17 строке, мой вердикт пока...


 
yantux ©   (2009-10-12 11:04) [13]

> если хочешь партизанить - не получишь ответ на сабж...

Вопрос не в том, чтобы вы нашли ошибку, спасибо за помощь, но я её сам найду. Вопрос в том, КАК заставить программу возращать память. В Java есть сборщик мусора, который сам, без учатия программиста возвращает память системе. С С++ всё нужно прописывать вручную. В Delphi я новичёк.

Нельзя в Delphi автоматизировать возвращение памяти ОС? Например поставить галочку в опциях компиляции или надо везде вручную прописывать setlength(a,1), чтобы программа возвращала память ОС? Ибо кроме setlength() я ни чего не использую для выделения памяти.


 
RWolf ©   (2009-10-12 11:09) [14]

Повторюсь, в D7 нет сборщика мусора, вся выделенная компилятором память честно возвращается при выходе за пределы видимости переменной. Мусорить может только сам программист — неосвобождением памяти, которую сам выделил на куче.


 
Dennis I. Komarov ©   (2009-10-12 11:25) [15]


> yantux ©   (12.10.09 10:51) [7]
> > но как описана a ?
>
> record

Сдается мне, что указатель там где-то...


 
DrPass ©   (2009-10-12 11:57) [16]


> brother ©   (12.10.09 10:48) [5]
> > Если я сделаю setlength(a,1), то программа вернёт ОС память,
>
> > которую занимали 99 эелементов?
>
> да

Нет. Она их вернет своему менеджеру памяти. Менеджер памяти совершенно не обязательно побежит срочно их возвращать ОС.


 
yantux ©   (2009-10-12 12:55) [17]

> Нет. Она их вернет своему менеджеру памяти. Менеджер памяти совершенно не обязательно побежит срочно их возвращать ОС.

Замечательно. Допустим я делаю:
setlength(a,100);//выделяю память
setlength(a,1);//отдаю менеджеры памяти
setlength(b,100);// ! в этом месте менеджер памяти будет выделять памяьб из своих ресурсов или запросит у ОС?

Есть ли функйции, опции компилятора, которые влияли бы на работу менеджера памяти?


 
Стенка   (2009-10-12 13:01) [18]

А есть ли функции, опции компилятора, которые влияли бы на работу программиста, размещающего объекты в рекордах?


 
sniknik ©   (2009-10-12 13:03) [19]

> setlength(b,100);// ! в этом месте менеджер памяти будет выделять памяьб из своих ресурсов или запросит у ОС?
из своих.

вообще ты зря ищешь утечки в дельфевском менеджере, ищи в своем коде как советовали.

> Есть ли функйции, опции компилятора, которые влияли бы на работу менеджера памяти?
есть, но партизанам они не нужны.


 
Сергей М. ©   (2009-10-12 13:07) [20]


> в этом месте менеджер памяти будет выделять памяьб из своих
> ресурсов


Из своих.


 
Плохиш ©   (2009-10-12 13:47) [21]

Ахтунг, партизанен. Вешать, вешать и вешать...


 
Плохиш ©   (2009-10-12 13:49) [22]


> yantux ©   (12.10.09 10:51) [7]
>
> > но как описана a ?
>
> record

Или приводишь его описание, код работы с элементами массива, или иди слесари дальше.


 
yantux ©   (2009-10-12 14:07) [23]

> Сдается мне, что указатель там где-то...

Я вообще не использую указателей. Не хочу заморачиваться с malloc и free, именно по этой причине я использую setlength.


 
yantux ©   (2009-10-12 14:10) [24]

> имхо не утечка там, а реально много выделено)

Я так понимаю утечки могут возникать, если вызывать malloc, new и не вовремя delete, free. Я этим не пользуюсь. Только setlength


 
yantux ©   (2009-10-12 14:12) [25]

> вообще ты зря ищешь утечки в дельфевском менеджере, ищи в своем коде как советовали.

Я не ищу утечек, поскольку я не использую malloc, new. Правильно ли я понимаю, что для оптимального использования памяти мне достаточно вовремя вызывать setlength(a,1) ?


 
Стенка   (2009-10-12 14:14) [26]

> КАК заставить программу возращать память?

Вопрос поставлен неверно. Надо так:
КАК заставить программиста вернуть память, занятую изображениями?

Ответить на этот вопрос без кода НЕВОЗМОЖНО.


 
Стенка   (2009-10-12 14:16) [27]

> yantux ©   (12.10.09 14:12) [25]
> Правильно ли я понимаю, что ...

Нет


 
yantux ©   (2009-10-12 14:18) [28]

> есть, но партизанам они не нужны.

Какие проблемы могут помочь решать эти функции? Они влияют на работу setlength? Я в своём проекте поставил почти  все галочки в опциях компилятора. Насколько я понял, только в этом случае делфийный компилятор нормально отлавливает мои ошибки и помогает писать более надёжную программу с точки зрения стабильности работы.


 
Игорь Шевченко ©   (2009-10-12 14:22) [29]

На абстрактный код тебе дали абстрактный ответ - [12]


 
yantux ©   (2009-10-12 14:25) [30]

> КАК заставить программиста вернуть память, занятую изображениями?
> Ответить на этот вопрос без кода НЕВОЗМОЖНО.

var
a, b : array of integer; (* создаю безразмерный массив *)
begin
setlength(a,1000000); (* выделяем память *)

...
(* пользуюсь массивом a *)
...

setlength(a,1); (* этого достаточно для освобождения памяти? *)

(* сколько памяти запросит менеджер памяти  у ОС?
будет ли МП использовать загашник в 1Мб? *)
setlength(b,2000000);

end;


 
Inovet ©   (2009-10-12 14:31) [31]

> [30] yantux ©   (12.10.09 14:25)
> > КАК заставить программиста вернуть память, занятую изображениями?
>
> > Ответить на этот вопрос без кода НЕВОЗМОЖНО.
>
> var
> a, b : array of integer; (* создаю безразмерный массив *)
>
> begin
> setlength(a,1000000); (* выделяем память *)
>
> ...
> (* пользуюсь массивом a *)
> ...
>
> setlength(a,1); (* этого достаточно для освобождения памяти?
> *)
>
> (* сколько памяти запросит менеджер памяти  у ОС?
> будет ли МП использовать загашник в 1Мб? *)
> setlength(b,2000000);
>
> end;

Кусок в 2000000 для массива нужен непрерывный, если такой найдётся, то не будет.


 
Kolan ©   (2009-10-12 14:37) [32]

>setlength(a,1); (* этого достаточно для освобождения памяти? *)
Странно что не setlength(a,0);

Я бы посоветовал вам воспользоваться списком (лучше списком объектов TObjectList, чтобы совсем не парится с памятью). Дело в том, что для массива нужен непрерывный кусок памяти, а список распихивается в любое свободное место.


 
Стенка   (2009-10-12 14:40) [33]

Это
> yantux ©   (12.10.09 10:54) [10]
> растровые фотки их обработка

противоречит этому
> yantux ©   (12.10.09 14:25) [30]
> a, b : array of integer;


 
yantux ©   (2009-10-12 14:42) [34]

> Кусок в 2000000 для массива нужен непрерывный, если такой найдётся, то не будет.

а если так?

var
   a1, a2, b : array of integer; (* создаю безразмерный массив *)
begin
setlength(a1,500000); (* выделяем память *)
setlength(a2,500000); (* выделяем память *)

...
(* пользуюсь массивом a1, a2 *)
...

setlength(a1,1); (* этого достаточно для освобождения памяти? *)
setlength(a2,1); (* этого достаточно для освобождения памяти? *)

(* сколько памяти запросит менеджер памяти  у ОС?
будет ли МП использовать загашник два блока по 500000? *)
setlength(b,1000000);

end;

делает ли менеджер памяти аля дефрагментацию, объединение нескольких свободных блоков памяти в один?


 
Kolan ©   (2009-10-12 14:44) [35]

Я бы не рассчитывал на работу менеджера памяти, непонятно зачем такие здоровые куски нужны в виде массивов.


 
Стенка   (2009-10-12 14:45) [36]

> yantux ©   (12.10.09 14:42) [34]

Менеджер памяти все делает наилучшим образом для array of integer,
но это не твой случай


 
yantux ©   (2009-10-12 14:45) [37]

> Я бы посоветовал вам воспользоваться списком (лучше списком объектов TObjectList, чтобы совсем не парится с памятью). Дело в том, что для массива нужен непрерывный кусок памяти, а список распихивается в любое свободное место.

ок, спасибо, буду копать


 
yantux ©   (2009-10-12 14:47) [38]

> Я бы не рассчитывал на работу менеджера памяти, непонятно зачем такие здоровые куски нужны в виде массивов.

Почему нельзя расчитывать на МП? В чём проблема?


 
yantux ©   (2009-10-12 14:48) [39]

> противоречит этому

мне так удобно


 
Стенка   (2009-10-12 14:49) [40]

Ты победил


 
Kolan ©   (2009-10-12 14:55) [41]

Менеджер памяти сложная штука, разобраться в ней не так уж и просто. Более того, алгоритмы запросто могут измениться. Поэтому полагаться на его особенности опасно.


 
Стенка   (2009-10-12 14:59) [42]

Как страшно жить. Все мои программы на него полагаются.


 
Inovet ©   (2009-10-12 15:06) [43]

> [34] yantux ©   (12.10.09 14:42)
> а если так?

См

> [41] Kolan ©   (12.10.09 14:55)
> Менеджер памяти сложная штука, разобраться в ней не так
> уж и просто. Более того, алгоритмы запросто могут измениться.
> Поэтому полагаться на его особенности опасно.

Ну допустим, что 2 * 5000000 не сразу отдаст ОС,
1. не факт что они расположены последовательно
2. после SetLength в 0 в эти куски что-то не прописалось тобой же самим.


 
Inovet ©   (2009-10-12 15:09) [44]

> [42] Стенка   (12.10.09 14:59)
> Как страшно жить. Все мои программы на него полагаются.


> [41] Kolan ©   (12.10.09 14:55)
> на его особенности


 
Стенка   (2009-10-12 15:20) [45]

> Inovet ©   (12.10.09 15:09) [44]

То, что автомобиль едет не является его особенностью. Вот если стоит - особенность.
То, что менеджер памяти выдает и освобождает память по запросу ровно столько, сколько запросили, - это не особенность, а нормальная работа.
А то, что чел дефрагментирует память, не возвращая все взятое, это особенность чела.


 
Сергей М. ©   (2009-10-12 15:25) [46]


> будет ли МП использовать загашник два блока по 500000?


Не будет.
Этих блоков попросту нет - ты вернел назад не два по 500000, а два по 499999 элементов.

А даже если бы и вернул два по 500000, то не факт что они расположены  последовательно, что при запросе 1000000 элементов позволило бы менеджеру объединить их в один непрерывный блок.

Да и не может этот код привести EOutOfMemory/


 
yantux ©   (2009-10-12 15:40) [47]

> Менеджер памяти сложная штука, разобраться в ней не так уж и просто. > Более того, алгоритмы запросто могут измениться. Поэтому полагаться на > его особенности опасно.

Да, но он придуман, чтобы упрощать работу программиста. В этом его полезное свойство. Тогда почему на него нельзя положиться?


 
yantux ©   (2009-10-12 15:41) [48]

> А то, что чел дефрагментирует память, не возвращая все взятое, это особенность чела.

Ни чего я не дефрагментирую, я даже не знаю, как это делать. Это java дефрагментирует, но программисту даже не надо об этом знать.


 
yantux ©   (2009-10-12 15:44) [49]

> Ну допустим, что 2 * 5000000 не сразу отдаст ОС,
> 1. не факт что они расположены последовательно
> 2. после SetLength в 0 в эти куски что-то не прописалось тобой же самим.

Можно ли менеджер памяти заставить сразу отдавать ОС, чтобы он делал это автоматически?

1. на последовательность я даже не расчитываю
2. в этом случае устойчиво срабатывает исключение на проверку выхода за границе массива, соответсвующую галочку поставил в опциях компилятора


 
sniknik ©   (2009-10-12 15:46) [50]

> Я не ищу утечек, поскольку я не использую malloc, new.
ну и дура... (© Джентльмены удачи), какая разница как ты накрасишься, если под видом бабы все одно мужик?
...
procedure NotMalloc(...)
begin
 ... malloc(...)
end;

невозможная ситуация? а ты ВЕСЬ используемый код, не свой, а то что в нем используется, изучил... ну, ну.

>> Ответить на этот вопрос без кода НЕВОЗМОЖНО.
> var
> a, b : array of integer; (* создаю безразмерный массив *)
ты кого обманываешь? сам себя... работа с массивом чисел и массивом рекордов (про которые речь в начале), очень сильно различается.


 
Kolan ©   (2009-10-12 15:47) [51]

Я, лично, считаю, что не надо наедятся на то, что у менеджера памяти что-то останется или не останется в загашнике.

Я, персонально, думаю, что выделять массивы размером в несколько миллионов элементов нужно очень редко, почти никогда.

Еще я думаю, с учетом: «растровые фотки их обработка», что для сабжа вообще не нужно выделять всю память сразу, а можно подгружать фотки и удалять ненужные (не видимые?) по мере надобности.


 
Kolan ©   (2009-10-12 15:49) [52]

Кстати, даже если менеджер памяти отдаст её ОС, то это не значит, что она станет доступна для других процессов.


 
Стенка   (2009-10-12 15:58) [53]

> А то, что чел дефрагментирует память, не возвращая все взятое, это особенность чела.

фрагментирует


 
Inovet ©   (2009-10-12 16:00) [54]

> [49] yantux ©   (12.10.09 15:44)
> 2. в этом случае устойчиво срабатывает исключение на проверку
> выхода за границе массива, соответсвующую галочку поставил
> в опциях компилятора

Длину ты изменил до 0, но ты пользуешься библиотекой и если не сам явно, то откуда гарантия, что в ней не произошло фрагментации. Да и вообще что за фобия выделять и освобождать по человечески.

выделение;
try
 что-то делаешь;
finally
 освобождение;


 
Dennis I. Komarov ©   (2009-10-12 16:52) [55]

Во человек - пол сотни постов, а показать что в массиве...
Боюсь стенка лба не выдержит...


 
Стенка   (2009-10-12 19:49) [56]

Уже не выдержала. Лоб оказался крепче.


 
brother ©   (2009-10-13 04:36) [57]

я ему еще в [12] все ответил...


 
MonoLife ©   (2009-10-13 06:50) [58]

yantux ©   (12.10.09 10:51) [7]

> но как описана a ?

record

yantux ©   (12.10.09 10:54) [10]

> или мы должны гдать размер одного элемента... ибо 100 непонятно чего жрет 240 мб оперативы?

растровые фотки их обработка

что-то я не увидел у автора сабжа где и как загружаются и освобождаются в record "фотки".. всё про массив integer твердит.. ей богу, "партизанен"))
С логикой проектирования тоже как-то подозрительно, как сказал Kolan ©   (12.10.09 15:47) [51]


 
yantux ©   (2009-10-13 10:34) [59]

> ты кого обманываешь? сам себя... работа с массивом чисел и массивом >рекордов (про которые речь в начале), очень сильно различается.

Со своей точки зрения программиста не вижу разницы, т.е. я надеюсь что эти отличия изолированы от меня.

>Длину ты изменил до 0, но ты пользуешься библиотекой и если не сам >явно, то откуда гарантия, что в ней не произошло фрагментации. Да и >вообще что за фобия выделять и освобождать по человечески.
>
>выделение;
>try
> что-то делаешь;
>finally
> освобождение;

Можно и так,  но почему не ползоваться setlength() ? Чем он хуже?

>Я, персонально, думаю, что выделять массивы размером в несколько >миллионов элементов нужно очень редко, почти никогда.
>
>Еще я думаю, с учетом: «растровые фотки их обработка», что для сабжа >вообще не нужно выделять всю память сразу, а можно подгружать фотки и >удалять ненужные (не видимые?) по мере надобности.

Не охота тратить время на ввод/вывод, тем более, если это тормозная флешка или cd. Загрузил, обработал, сохранил - так быстрее.

>Кстати, даже если менеджер памяти отдаст её ОС, то это не значит, что >она станет доступна для других процессов.
Это уже не касается моей программы, это проблема ОС.


 
Inovet ©   (2009-10-13 10:40) [60]

> [59] yantux ©   (13.10.09 10:34)
> >выделение;
> >try
> > что-то делаешь;
> >finally
> > освобождение;
>
> Можно и так,  но почему не ползоваться setlength() ? Чем
> он хуже?

Хотя бы потому, что одно дело функция, и другое механизм языка.


 
Inovet ©   (2009-10-13 10:42) [61]

> [59] yantux ©   (13.10.09 10:34)
> > ты кого обманываешь? сам себя... работа с массивом чисел
> и массивом >рекордов (про которые речь в начале), очень
> сильно различается.
>
> Со своей точки зрения программиста не вижу разницы, т.е.
> я надеюсь что эти отличия изолированы от меня.

Ты хочешь, чтоб тебе указали на ошибку не видя эту рекорд?


 
sniknik ©   (2009-10-13 10:58) [62]

> Со своей точки зрения программиста не вижу разницы, т.е. я надеюсь что эти отличия изолированы от меня.
это точка зрения НЕ программиста...
можешь ссылаться на разные скриптовые языки, где более полная изоляция, но она сделана за счет чего то - меньшей производительности кода, больших ограничений самого программиста, отсутствия независимой от интерпретатора программы, за счет того что учишь ты там не работу системы, а работу прикладной программы которой по сути является скриптовый интерпретатор... ну и что что управляешь ты им с помощью чего то очень похожего на компилируемый язык, сути это не меняет.

в компилируемых не так, там часто НЕВОЗМОЖНО отследить чего и где на-создал программист (есть ссылки, указатели, есть передачи по не типизированным указателям, где только программист и может знать что по ним "лежит"), в общем если ты на-создавал в своих рекордах каких то объектов, ссылок, а после освобождаеш только "внешнее", то "внутреннее" за тебя компилятор освобождать даже не попытается... (мало ли где ты на эти объекты еще ссылаешься), изолировать это от ПРОГРАММИСТА можно только запретив... если тебе это не нравится то ВАЛИ с дельфи, это не твое...

> это проблема ОС.
виноваты все кроме тебя естественно, это так по ламерски...


 
RWolf ©   (2009-10-13 11:06) [63]

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


 
yantux ©   (2009-10-13 11:44) [64]

> (есть ссылки, указатели, есть передачи по не типизированным указателям, >где только программист и может знать что по ним "лежит"), в общем если >ты на-создавал в своих рекордах каких то объектов, ссылок, а после >освобождаеш только "внешнее", то "внутреннее" за тебя компилятор >освобождать даже не попытается...

Я прекрасно это понимаю, поэтому не испоьзую указателей, объектов и прочее в нутри рекода.


 
yantux ©   (2009-10-13 11:48) [65]

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

т.е. если я использую setlength, то менеджер памяти будет всё грести под себя, а если я буду использовать new, dispose, то я смогу освобождать память и честно возвращать ОС? Но если идти таким путём, то как снежный ком в С++ начнуть плодиться ошибки утечки памяти. Хотелось бы этого избежать.

Можно ли турнуть менеджер памяти, что бы после setlength(z,0) он возвращал всю память ОС?


 
RWolf ©   (2009-10-13 12:01) [66]


> т.е. если я использую setlength, то менеджер памяти будет
> всё грести под себя, а если я буду использовать new, dispose,
>  то я смогу освобождать память и честно возвращать ОС?


Смотря как использовать.
Пример. Вот ты выделил мегабайтный массив, и сразу за ним что-то положил менеджер. Занято — метр с лишним.
Далее ты задал массиву длину 0. Получилась метровая дыра в памяти, управляемой менеджером. Занято — опять же метр с лишним.
Если сразу же задать массиву прежнюю длину, он разместится в том же месте, и памяти займётся не больше прежнего. Если хоть на байт больше — поимеем уже два с лишним метра занятой памяти. Если менеджер перед этим успел что-то ещё разместить в свободном месте — в него не поместится и прежний мегабайтный массив.
Если размещаешь/освобождаешь в куче сам, то избегаешь таких ситуаций.


> о если идти таким путём, то как снежный ком в С++ начнуть
> плодиться ошибки утечки памяти

Утечки в С++ плодятся не просто из-за ручного выделения/освобождения, это чересчур просто (хотя и бывает), а из-за того, что оно хитро прячется за перегрузками операторов, передачами по ссылке, копированию объектов и ещё тысяче мелочей; в общем — из-за злоупотреблением чрезмерной сложностью языка.


 
sniknik ©   (2009-10-13 12:33) [67]

> Я прекрасно это понимаю, поэтому не испоьзую указателей, объектов и прочее в нутри рекода.
и думаешь исходя из твоего понимания компилятор будет работать по другому? а переключатель у него телапатический, для тех кто понимает и использует один код, понимает и не использует другой, не понимает но использует третий и т.д. ... смешно.

> Можно ли турнуть менеджер памяти, что бы после setlength(z,0) он возвращал всю память ОС?
повторение мать учения... можно, но партизанам это не нужно.


 
Dennis I. Komarov ©   (2009-10-13 12:34) [68]


> Я прекрасно это понимаю, поэтому не испоьзую указателей,
>  объектов и прочее в нутри рекода.

Вретес ведь, Штирлиц....


 
Плохиш ©   (2009-10-13 13:40) [69]


> Вретес ведь, Штирлиц....

Разве Штирлиц был сантехником?


 
brother ©   (2009-10-14 06:43) [70]

> Разве Штирлиц был сантехником?

он был разведчиком) как и автор)


 
clickmaker ©   (2009-10-14 10:29) [71]

> Можно ли турнуть менеджер памяти, что бы после setlength(z,
> 0) он возвращал всю память ОС?

Finalize(z)


 
yantux ©   (2009-10-14 14:26) [72]

> Finalize(z)

спасибо



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.11.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.66 MB
Время: 0.005 c
8-1190043138
<A~kiber}{ aka a.k.>
2007-09-17 19:32
2009.11.29
как сделать элемент управления неправильной формы


15-1254515407
Юрий
2009-10-03 00:30
2009.11.29
С днем рождения ! 3 октября 2009 суббота


15-1254342609
Юрий
2009-10-01 00:30
2009.11.29
С днем рождения ! 1 октября 2009 четверг


2-1253455939
antonn
2009-09-20 18:12
2009.11.29
процедура возвращающая параметр заполняемые в потоке


2-1255588723
Маркабес
2009-10-15 10:38
2009.11.29
Как составить SQL запрос в жоские условия ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский