PDA

View Full Version : سوال: با فراخوانی گزارش Stimul فضای مورد استفاده از Ram چند برابر میشه ؟!!!



Alen
چهارشنبه 11 آبان 1390, 23:01 عصر
سلام دوستان ، نرم اقزاری که طراحی کردم در حالت عادی بین 70 تا 90 مگابایت از Ram رو به خودش اختصاص میده حتی وقتی لیست های سنگینی رو تو Grid به کاربر نمایش میدم فضا از این بیشتر نمیشه اما وقتی یه گزارش رو که با Stimul طراحی کردم فراخوانی میکنم فضای مورد استفاده به 120 و حتی گاهی 300 مگابایت هم میرسه ، آیا دوستان هم همین مشگل رو دارند؟
این جرو خصوصیات Stimul هستش؟

Alen
دوشنبه 16 آبان 1390, 23:09 عصر
کسی از دوستان که از Stimul Report استفاده می کنه ، محبت میکنه موقع اجرای برنامه میزان فضای مصرفی برنامه اش رو اندازه گیری کنه به من بگه؟

in_chand_nafar
سه شنبه 17 آبان 1390, 09:33 صبح
دوست عزیز این برنامه از لحاظ قابلیت خوبه اما از لحاظ Performance بسیار بد عمل می کند
به این لینک (http://barnamenevis.org/showthread.php?309656-%D8%A8%D8%B1%D8%B1%D8%B3%D9%8A-Performance-%D8%B3%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%DA%AF%D8%B2%D8%A7%D8%B1%D8%B4-%DA%AF%D9%8A%D8%B1%D9%8A-%28StimulReport-Fast-Rport-Crystal-Rport%29&p=1362339#post1362339)سر بزن

saeed_sho
سه شنبه 17 آبان 1390, 11:48 صبح
گزارشه منم حدود 15 ثانیه طول میکشه تا بیاد اما کار باهاش راحته

in_chand_nafar
سه شنبه 17 آبان 1390, 13:41 عصر
ممکن در حجم رکوردهای بالا و بانک های بزرگ کم بیاره کلا کریستال ریپورت با وجود سخت بودن و... از این نرم افزار بهتر عمل می کند
در صورت امکان با یک گزارش در یک بانک اطلاعاتی بزرگ هم در کریستال و هم در Stimul طراحی کن
بعد با SQL Profiler نوع کوئری زدن هر دو رو بررسی کن و سرعت رو مقایسه کن حجم اطلاعاتی که از سرور به کلاینت ارسال میشه را مقایسه کن سرعت رندر شدن گزارش را مقایسه کن بعدا می فهمی کدام یکی خوب است
Stimul , Fast report هر دو محصول برادران کمونیست روسی هستند در این زمینه هنوز جای کار دارد اما Fast Report اگر خوب بتوانی ازش استفاده کنی بهتر از کریستال و Stimul جواب می دهد

r0ot$harp
سه شنبه 17 آبان 1390, 16:40 عصر
سلام دوستان عزیز.

کمونیست ما هستیم که از تکنولوژی بقیه استفاده می کنیم سود می بیریم و پشتشونم کلی حرف می زنیم . اگر همین کمونیست ها نبودن خیلی از ماها به هیچ کدوم از سود هامون نمی رسیدیم .

در مورد گزارش گیری می شه گفت بهترین انتخاب FastReport هست . واقعا عالیه .

باتشکر احسان

webpooyan
سه شنبه 08 اردیبهشت 1394, 00:55 صبح
لطفا بفرمایید چه طوری می توان میزان رم مصرف شده را بعد از بستن استیمال به حال عادی برگرداند ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟

FastCode
سه شنبه 08 اردیبهشت 1394, 07:23 صبح
من با خیلی از این نرمافزار ها کار کردم.
تا اینکه سازنده یکی از اونها چند ماه قبل به من یه پیشنهاد جالب داد و گفت که خودش هم داره همین کار رو میکنه.
tomasz kubakki سازنده monoreports
پیشنهادشون طراحی چاپ با html بود و رندر گرفتن با یه انجین مثل phantomjs
اینها نمونه کدهای من هستن:


Stream configStream = fileInterfaceInstance.Read ("PhantomJS Prints" + System.IO.Path.DirectorySeparatorChar + "Configuration.xml");
System.Xml.Serialization.XmlSerializer xmls = new System.Xml.Serialization.XmlSerializer (typeof(PrintConfiguration[]), new []{ typeof(PrintConfiguration) });
PrintConfiguration[] config = (PrintConfiguration[])xmls.Deserialize (configStream);
foreach (var c in config) {
configs.Add (c.Name, c);
}



public override IAsyncResult BeginPrint (string name, System.Collections.Generic.IDictionary<string, SortedSet<DCBase>> tables, System.Collections.Generic.IDictionary<string, object> parameters, AsyncCallback asyncCallback, object asyncState)

string html;
if (!managers.ContainsKey (name)) {
if (!configs.ContainsKey (name)) {
throw new ArgumentException ("no tempelate defined for {0}", name);
} else {
var conf = fileInterfaceInstance.Read ("PhantomJS Prints" + System.IO.Path.DirectorySeparatorChar + configs [name].Path);
Console.WriteLine ("conf:{0}", conf.Length);
managers.Add (name, new PrintManager (conf));
}
}
html = managers [name].Compile (tables, parameters);
Console.WriteLine ("html:{0}", html.Length);
string binaryName;
if (System.Environment.OSVersion.Platform == PlatformID.Win32NT)
binaryName = "phantomjs.exe";
else
binaryName = "phantomjs";
string dateTime = DateTime.Now.ToString ().Replace ("/", "_").Replace (":", "_");
Guid id = Guid.NewGuid ();
//string htmlFileName = "temp" + Path.DirectorySeparatorChar + "PhantomJS Print - " + name + " - " + dateTime + " - " + id.ToString () + ".html";
string pdfFileName = "temp" + Path.DirectorySeparatorChar + "PhantomJS Print - " + name + " - " + dateTime + " - " + id.ToString () + ".pdf";
//htmlFileName.Replace (" ", "");
//pdfFileName.Replace (" ", "");
//Console.WriteLine ("html:{0}", htmlFileName);
Console.WriteLine ("pdf:{0}", pdfFileName);
//System.IO.File.WriteAllText (htmlFileName, html, System.Text.Encoding.Unicode);
string arguments = "\"PhantomJS Prints/stdrasterize.js\" " + (parameters.ContainsKey ("Orientation") && Equals (parameters ["Orientation"], "landscape") ? "297mm*210mm" : "210mm*297mm") + " 1cm";
Console.WriteLine ("Arguments: {0}", arguments);
Process p = new Process ();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.FileName = binaryName;
p.StartInfo.Arguments = arguments;
p.StartInfo.ErrorDialog = false;
p.StartInfo.RedirectStandardError = true;
p.Start ();
p.StandardInput.WriteLine (html);
p.StandardInput.Flush ();
p.StandardInput.Close ();
p.WaitForExit ();
var pdfStream = System.IO.File.OpenWrite (pdfFileName);
p.StandardOutput.BaseStream.CopyTo (pdfStream);
pdfStream.Close ();




public string Compile (System.Collections.Generic.IDictionary<string, SortedSet<DCBase>> tables, System.Collections.Generic.IDictionary<string, object> parameters)
{
var StaticParameters = CreateParameters ();
StringBuilder sb = new StringBuilder (printData, printData.Length * 2);
foreach (var kvp in StaticParameters)
sb.Replace ("$$" + kvp.Key + "", System.Web.HttpUtility.HtmlEncode (kvp.Value));
foreach (var kvp in parameters)
sb.Replace ("$$" + kvp.Key + "", System.Web.HttpUtility.HtmlEncode (kvp.Value.ToString ()));
string report = sb.ToString ();
foreach (var tp in tables) {
bool d = true;
while (d) {
int tableBeginOffset = report.IndexOf ("<$" + tp.Key + ">", StringComparison.Ordinal);
int tableEndOffset = report.IndexOf ("</$" + tp.Key + ">", StringComparison.Ordinal);
if (tableBeginOffset == -1) {
d = false;
continue;
}
if (tableEndOffset == -1) {
d = false;
continue;
}
string tableFields = report.Substring (tableBeginOffset, tableEndOffset - tableBeginOffset);
StringBuilder TBuilder = new StringBuilder ();
foreach (var row in tp.Value) {
string RowText = tableFields;
foreach (var column in row.Columns) {
RowText.Replace ("<$" + column + "/>", System.Web.HttpUtility.HtmlEncode (row.GetValue (column).ToString ()));
}
TBuilder.Append (RowText);
}
report = report.Substring (0, tableBeginOffset) + TBuilder + report.Substring (tableEndOffset + ("</$" + tp.Key + ">").Length);
}
}
return report;
}


var page = require('webpage').create(),
system = require('system'),
size;
fs = require('fs');
size = system.args[1].split('*');
page.paperSize = size.length === 2 ? { width: size[0], height: size[1], margin: system.args[2] } : { format: system.args[1], orientation: 'portrait', margin: system.args[2] };
page.content = system.stdin;
window.setTimeout(function() {
page.render(system.stdout, { format: 'pdf' });
phantom.exit();
}, 1000);

نمونه فایل پرینت:
130693
خیلی خلاصه, راحت شدم.
هر چیزی رو که نمیدونید چیه با DataRow/DataTable/... عوض کنید.

FastCode
سه شنبه 08 اردیبهشت 1394, 14:11 عصر
تست شده با .net 3.5 .net 4 .net 4.5 mono/.net 4 mono/.net4.5 .net 4.5.1 mono/.net4.5.1 در ویندوز و لینوکس.

ghasem110deh
سه شنبه 08 اردیبهشت 1394, 14:50 عصر
سلام
یعنی با استفاده از xml یه صفحه پرینت طراحی کردین !؟
بعد اطلاعات به اون صفحه ارسال میشه (از طریق دیتاتیبل یا ...)

FastCode
سه شنبه 08 اردیبهشت 1394, 15:01 عصر
سلام
یعنی با استفاده از xml یه صفحه پرینت طراحی کردین !؟
بعد اطلاعات به اون صفحه ارسال میشه (از طریق دیتاتیبل یا ...)

html, بله.و خروجی pdf میده که میتونید با چند خط دستور دیگه با هر برنامه ای که روی سیستم نصب هست مثل adobe reader یا evince چاپ کنید.