Hmmm, nisam siguran da minimiziranje i maksimiziranje obavezno pokreće GC. Ono što se tada desi je da sistem prebaci deo zauzete virtuelne memorije iz RAM-a na HDD.
.NET jede memoriju
Zaključano
Zakačeno
zar virtuelna memorija nije ona na hdd.
tacno za gcc. hteo sam napisati optimizacija.
hteo sam poentirati da je prava velicina
net programa ona koja pise u procesu
posle minimiziranja i maksimiziranja.
onaj veliki deo koji nestane je memorija
potrebna za funkcionisanje gc-a.
tacno za gcc. hteo sam napisati optimizacija.
hteo sam poentirati da je prava velicina
net programa ona koja pise u procesu
posle minimiziranja i maksimiziranja.
onaj veliki deo koji nestane je memorija
potrebna za funkcionisanje gc-a.
Vidim da su vasa iskustva sa .Net-om na slabijim masinama losa, ali moram da izlozim svoj slucaj. Napravio sam aplikaciju koja koristi .Net Remote-ing, Sto znaci da mi je Interface bio na jednom kopjuteru koji je inace P1 166Mhz, a aplikativni server i baza na drugom kompu, povezani obicnim ukrstenim mreznim kablom, i to je funkcionisalo savrseno. Samo prvi put kada se staruje deo aplikacije na P1, potrebno mu je da izvuce neke podatke iz baze oko 1s, posle toga svaki pristup bazi tj. povlacenje podataka i update je radio skoro trenutno.
ovo je interesantan kod:
Code:
using System;
namespace FinalizeBenchmark {
class Benchmark {
/// <summary>
/// Start with an arg to perform the Dispose benchmark. Start with no args for a no dispose benchmark.
/// </summary>
static void Main(string[] args) {
// Get everything jitted
DateTime x = DateTime.Now;
FinalizeObject o = new FinalizeObject();
o.DoSomeWork();
o.Dispose();
o = new FinalizeObject();
// Collect and wait
GC.Collect();
GC.WaitForPendingFinalizers();
// Benchmark
if (args.Length != 0) {
performBenchmarkDispose();
} else {
performBenchmarkNoDispose();
}
}
static void performBenchmarkNoDispose() {
DateTime start, end;
start = DateTime.Now;
for (int i = 0; i < 10000000; i++) {
FinalizeObject o = new FinalizeObject();
o.DoSomeWork();
}
GC.Collect();
GC.WaitForPendingFinalizers();
end = DateTime.Now;
Console.WriteLine("No dispose time: {0}", end - start);
}
static void performBenchmarkDispose() {
DateTime start, end;
start = DateTime.Now;
for (int i = 0; i < 10000000; i++) {
FinalizeObject o = new FinalizeObject();
o.DoSomeWork();
o.Dispose();
}
GC.Collect();
GC.WaitForPendingFinalizers();
end = DateTime.Now;
Console.WriteLine("Dispose time: {0}", end - start);
}
}
class FinalizeObject : IDisposable {
private volatile int someInt;
private static Random random = new Random();
public void DoSomeWork() {
this.someInt = random.Next(10000000);
}
private bool disposed = false;
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
protected void Dispose(bool disposing) {
if (disposed) return;
disposed = true;
if (disposing) {
// Dispose Managed resources
// Not needed in this class, but we could have a reference to
// a managed object that has an unmanaged resource
}
// Unmanaged resources
// Here we would get rid of direct unmanaged resources
}
~FinalizeObject() {
Dispose(false);
}
}
}
using System;
namespace FinalizeBenchmark {
class Benchmark {
/// <summary>
/// Start with an arg to perform the Dispose benchmark. Start with no args for a no dispose benchmark.
/// </summary>
static void Main(string[] args) {
// Get everything jitted
DateTime x = DateTime.Now;
FinalizeObject o = new FinalizeObject();
o.DoSomeWork();
o.Dispose();
o = new FinalizeObject();
// Collect and wait
GC.Collect();
GC.WaitForPendingFinalizers();
// Benchmark
if (args.Length != 0) {
performBenchmarkDispose();
} else {
performBenchmarkNoDispose();
}
}
static void performBenchmarkNoDispose() {
DateTime start, end;
start = DateTime.Now;
for (int i = 0; i < 10000000; i++) {
FinalizeObject o = new FinalizeObject();
o.DoSomeWork();
}
GC.Collect();
GC.WaitForPendingFinalizers();
end = DateTime.Now;
Console.WriteLine("No dispose time: {0}", end - start);
}
static void performBenchmarkDispose() {
DateTime start, end;
start = DateTime.Now;
for (int i = 0; i < 10000000; i++) {
FinalizeObject o = new FinalizeObject();
o.DoSomeWork();
o.Dispose();
}
GC.Collect();
GC.WaitForPendingFinalizers();
end = DateTime.Now;
Console.WriteLine("Dispose time: {0}", end - start);
}
}
class FinalizeObject : IDisposable {
private volatile int someInt;
private static Random random = new Random();
public void DoSomeWork() {
this.someInt = random.Next(10000000);
}
private bool disposed = false;
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
protected void Dispose(bool disposing) {
if (disposed) return;
disposed = true;
if (disposing) {
// Dispose Managed resources
// Not needed in this class, but we could have a reference to
// a managed object that has an unmanaged resource
}
// Unmanaged resources
// Here we would get rid of direct unmanaged resources
}
~FinalizeObject() {
Dispose(false);
}
}
}
resio sam ovaj problem sa memorijom
ukrao sam sam exe iz systemmehanic-a
koji prazni ram
tako da je zauzimao sam 15Mb RAM-a
ukrao sam sam exe iz systemmehanic-a
koji prazni ram
tako da je zauzimao sam 15Mb RAM-a
Potpis
Vb .net
_____________________
Dim Svako moze da nauci....:)
uz dobru pomoc
as String
_____________________
Dim Svako moze da nauci....:)
uz dobru pomoc
as String