אני סבור ששתיהם לוקחים אפס זמן, והזמן שמוצג הוא זמן מת - בכלל לא של העיבוד הזה.
ולכן לא ככה בודקים מהירות פעולות, אלא בכלים מתאימים.
אולי תנסה בלולאה * 1000 כדי שהפער יתן אינדיקציה משמעותית.
פורסם במקור בפורום CODE613 ב29/09/2013 11:17 (+03:00)
אני סבור ששתיהם לוקחים אפס זמן, והזמן שמוצג הוא זמן מת - בכלל לא של העיבוד הזה.
ולכן לא ככה בודקים מהירות פעולות, אלא בכלים מתאימים.
אולי תנסה בלולאה * 1000 כדי שהפער יתן אינדיקציה משמעותית.
פורסם במקור בפורום CODE613 ב29/09/2013 11:17 (+03:00)
אתה מוסיף ישירות לדטהגריד? תנסה לעבוד עם מקור נתונים (DataSource), ולהגדיר את המאפיין DataGridView.VirtualMode לTrue.
זה אמור לעבוד הרבה יותר טוב בכמויות גדולות של מידע.
הנה עוד טיפים להאצת/ייעול הפקד הזה: http://msdn.microsoft.com/en-us/library/ha5xt0d9.aspx
שים לב שאם יש לך את הרשימה ביד, הAddRange הרבה יותר מהיר ויעיל מAdd כפול מס' הפריטים.
אולי תנסה גם להקפיא את הרפרוש ע"י DataGridView.SuspendLayout בתחילת המילוי, וקריאה לDataGridView.ResumeLayout בסוף.
פורסם במקור בפורום CODE613 ב16/09/2013 11:54 (+03:00)
בעיה מעניינת.
עליך להשלים איתה מן הסתם.
הנה הדים נוספים:
http://www.pcreview.co.uk/forums/fontfamily-collection-refresh-question-t2469694.html
פורסם במקור בפורום CODE613 ב15/09/2013 11:07 (+03:00)
מישהו שאל אותי על זה, וכיון שזה שימושי חשבתי לכתוב כאן לתועלת הכלל
(בדיוק לאחרונה נזקקתי לכך ולקח לי זמן למצוא איך עושים את זה).
[size=150:vf9pa0ji][u:vf9pa0ji]רקע[/u:vf9pa0ji][/size:vf9pa0ji]
כשאנו יוצרים בVisualStudio דטה סט חדש ע"י האשף (Add Data Source), הוא שואל אותנו האם לשמור את הConnectionString כ"הגדרה" או לקודד אותה כפי שהיא במחלקות שנוצרות. בהסבר שם באנגלית הם מנדבים מידע נוסף: אם שומרים את הConnectionString כהגדרה, קל אח"כ לשנות אותה במקרה של נתיב משתנה בהפצת התוכנה.
אז כמובן שאני בוחר תמיד באפשרות ה"טובה" ואני שומר את הקונקשיין כהגדרה. אולם כעת נשאלת השאלה, איך משנים את ההגדרה "בקלות" כפי שהובטח?
אז זה ברור שאם ניכנס לApp.Config הצמוד לאפליקציה ונשנה ידנית את הנתיב אז זה ישתנה אבל זה לא נקרא קל, וגם בזמן ריצה זה כבר לא משנה מה שנשנה שם!
[size=150:vf9pa0ji][u:vf9pa0ji]פיתרון 1 : במידה ורוצים לשנות מידי פעם (לא קבוע) הConnectionString מכאן ולהבא ולשמור את השינוי להפעלה הבאה[/u:vf9pa0ji][/size:vf9pa0ji]
הנה הקוד, הוא משנה את ההגדרה של הקונקשיין סטרינג הספציפי:
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var connectionStringsSection = (ConnectionStringsSection)config.GetSection("connectionStrings");
connectionStringsSection.ConnectionStrings["השם של הקונקשיין שלנו"].ConnectionString = "Data Source=blah;Initial Catalog=blah;UID=blah;password=blah";
config.Save();
ConfigurationManager.RefreshSection("connectionStrings");
הקוד הזה מצריך Referance + Using ל System.Configuration.
שימו לב, פיתרון זה הוא מסורבל ומיותר למקרה שבאופן קבוע אנו רוצים לבחור את מקור הנתונים בזמן ריצה.
לשם כך הפיתרון השני.
[size=150:vf9pa0ji][u:vf9pa0ji]פיתרון 2 : כשרוצים שהConnectionString ייקבע בזמן ריצה לפי פרמטר כל שהוא[/u:vf9pa0ji][/size:vf9pa0ji]
במקרה כזה, בשעת יצירת הדטה סט אפשר לבחור שלא ישמור את הConnectionString כהגדרה כי ממילא לא יעשה בה שימוש.
ממש פשוט: אחרי כל יצירת דטה אדפטר יש ליצור לו קונקשן סטירנג. ככה לדוגמא:
var NewDa = new XxxxDataSetTableAdapters.XxxxTableAdapter();
NewDa.Connection = getConnection();
כאשר הפונקציה getConnection נראית מעין זו:
System.Data.SqlClient.SqlConnection getConnection()
{
if (true) //כאן בחינה/ברירה מה הקונקשיין המתאים
{
return new System.Data.SqlClient.SqlConnection("...");
}
else
{
return new System.Data.SqlClient.SqlConnection("...");
}
}
זה רק הדגמה, בפועל עדיף להציב את הקונקשנים במשתנים/מאפיינים ולא ליצור אותם שוב ושוב.
פורסם במקור בפורום CODE613 ב09/09/2013 16:15 (+03:00)
מאוד מבין את הסיטואציה המעצבנת של בעיה שלא ניתנת לדיבוג קל.
אבל גם אני חושב שקצת קוד יעזור.
באופן כללי, כיון שהבעיה היא סביב יצירת הטופס ההתחלתי, מה שמעניין זה הבנאי שלו (New) ואולי גם האירוע טעינה (OnLoad).
פורסם במקור בפורום CODE613 ב09/09/2013 17:01 (+03:00)
חזק מאוד..
אני כבר אתבייש להעלות קטעי קוד...
פורסם במקור בפורום CODE613 ב08/09/2013 13:33 (+03:00)
מה שאתה עושה זה נקרא להמציא את הגלגל מחדש.
יש ספריות שעושות את זה מהר פי מאה מלולאה על הקלאס ביטמאפ.
אכן גם במציאת הספריות אינני יכול לעזור לך, אבל אני מכוון אותך.
פורסם במקור בפורום CODE613 ב25/08/2013 18:25 (+03:00)
אפשר במקום לעקוב אחרי הליסטבוקס לעקוב אחרי ליסט (לליסט יש אירוע שינוי) ולקשר את הליסטבוקס לליסט.
הנה דוגמת קוד:
Dim binList As New BindingList(Of String)
AddHandler binList.AddingNew, Sub(s, e1) Beep()
binList.Add("1")
binList.Add("2")
binList.Add("3")
binList.Add("עוד")
binList.Add("ועוד")
ListBox1.DataSource = binList
השורה הראשונה יוצרת סוג של ליסט (מיוחד קצת, כי הרגיל הוא לא מתרפרש אחרי שינויים),
שורה 3 רושמת אירוע,
ושורה 13 מאגדת את הליסט לליסטבוקס.
פורסם במקור בפורום CODE613 ב21/08/2013 19:53 (+03:00)
א. אין היגיון לטיימר כ"כ צפוף, הכי מהר שהמחשב מכבה לבד זה דקה שזה אלף ולא מאה.
ב. בשביל לדחות את הטיימר לפי ההוראות של מיקרוספט מספיק
esFlags = EXECUTION_STATE.ES_CONTINUOUS Or EXECUTION_STATE.ES_SYSTEM_REQUIRED
פורסם במקור בפורום CODE613 ב10/10/2013 15:11 (+03:00)
ג. גם כדי לנטרל הירדמות אוטומטית אחר כמה דקות הפונקציה לא מועילה אם קוראים לה פעם אחת בלבד.
למסקנה:
יש להפעיל טיימר שקורא לפונקציה בתדירות גבוה כמה פעמים בשניה. ואז המחשב לא עובר למצב שינה בצורה אוטומטית, אבל כן יעבור למצב שינה ע''י לחצן שינה.
גם אם בדקת היטב את הפונקציה (וקראת לפונקצייה PowerSaveOff ולא לשנייה עד תום הדחיסה),
עדיין אל תעשה "מסקנות". לעצמך עשה מה שאתה רוצה, אבל אין זה אומר שזה הדרך היחידה.
מה יכול להיות? לא יודע. נסה להחליף את הערך הזה: &H1 בזה &H40.
כדי למנוע מהמשתמש להכניס לישון ידנית זה דורש מן הסתם הרשאות מנהל.
אינני יודע לעת עתה על דרך לזה.
פורסם במקור בפורום CODE613 ב10/10/2013 14:21 (+03:00)
אצלי בוינדוס 7 מוגדר שאחרי שלוש דקות ללא פעילות המחשב הולך לישון, כאשר הוא על סוללה.
הפעלתי תוכנה שכתבתי שדוחסת לזיפ כמות גדולה של קבצים ותוך כדי פעולה המחשב הלך לישון, כשהוא התעורר קיבלתי הודעת שגיאה שאי אפשר להמשיך לכתוב את הזיפ, כיון שההתקן החיצוני שבו נשמר הזיפ מתנתק בזמן שינה ומתחבר מחדש בהתעוררות.
זה הקוד שיש שמסתובב באינטרנט, אני לא יכול לנסות, תנסה אתה:
Private Declare Function SetThreadExecutionState Lib "kernel32" (ByVal esFlags As EXECUTION_STATE) As EXECUTION_STATE
Public Enum EXECUTION_STATE As Integer
ES_CONTINUOUS = &H80000000
ES_DISPLAY_REQUIRED = &H2
ES_SYSTEM_REQUIRED = &H1
End Enum
Public Function PowerSaveOff() As EXECUTION_STATE
Return SetThreadExecutionState(EXECUTION_STATE.ES_SYSTEM_REQUIRED Or EXECUTION_STATE.ES_DISPLAY_REQUIRED Or EXECUTION_STATE.ES_CONTINUOUS)
End Function
Public Function PowerSaveOn() As EXECUTION_STATE
Return SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS)
End Function
קריאה לPowerSaveOff אמורה לנטרל את ההירדמות האוטומטית.
כשגומרים את הפעולה, לקרוא לPowerSaveOn כדי להחזיר את המצב הרגיל.
פורסם במקור בפורום CODE613 ב10/10/2013 11:29 (+03:00)
איך בדקת עם מה שעשית עובד?
ניסית לעשות ידנית מצב שינה, או שהמתנת עד שיחלוף הפרק זמן והמחשב הלך לישון?
ובאיזה מערכת הפעלה אתה בודק?
פורסם במקור בפורום CODE613 ב09/10/2013 15:21 (+03:00)
שא"א לבטל זה אפשר להבין. אתה מעוניין לבטל?
והודעה, מה פירוש א"א? היא מופיעה רק לאחר השינה?
פורסם במקור בפורום CODE613 ב20/08/2013 11:21 (+03:00)
יש לך בToolBox בWinForms את הפקד FileSystemWatcher.
הוא זמין ברחבי הדוטנט בלי רפרנס, והוא נמצא בניימספייס System.IO.
אם אני זוכר טוב, יש לו כמה אירועים (מחיקה, חדש וכו'), ואחד כללי.
פורסם במקור בפורום CODE613 ב20/08/2013 11:20 (+03:00)
מה זה ה README.TXT
שם הקובץ המרוחק.
ולפני כן הנתיב.
פורסם במקור בפורום CODE613 ב20/08/2013 11:09 (+03:00)
הנה קטע קוד מstackoverflow
WebClient request = new WebClient();
string url = "ftp://ftp.microsoft.com/developr/fortran/" +"README.TXT";
request.Credentials = new NetworkCredential("anonymous", "anonymous@example.com");
try
{
byte[] newFileData = request.DownloadData(url);
string fileString = System.Text.Encoding.UTF8.GetString(newFileData);
Console.WriteLine(fileString);
}
catch (WebException e)
{
}
פורסם במקור בפורום CODE613 ב19/08/2013 13:06 (+03:00)
להוסיף למסד? או רק לדטהסט מהמסד?
ואני לא מכיר את זה שזה מוסיף קונקשיין חדש.
אני בחלונית Data Source מקליק בימיני על הDataSet ובוחר בConfigure וכו'.
לא יוצר שום קונקשיין חדש.
פורסם במקור בפורום CODE613 ב18/08/2013 14:09 (+03:00)
@דוד ל.ט.
כנראה הוא משותף (Shared) לכל הApplicationDomain בקיצור, פר אפילקציה. אבל אתה לא תיצור נוספת רק להשמע סימולטנית...לכן עניתי לך מה שעניתי.
לפי מה שאתה אומר אז הפתרון הוא לעשות טריד לא משותף, לא? וא''כ איך עושים טרידים לא משותפים?
מה שאתה אומר כתבתי מפורש שאינו פיתרון לדעתי ("פר אפילקציה. אבל אתה לא תיצור נוספת רק להשמע סימולטנית...").
ומה שכן פיתרון לדעתי גם כבר כתבתי לעיל.
פורסם במקור בפורום CODE613 ב20/08/2013 13:33 (+03:00)
בקוד שלך אתה דורס את הטריד הראשון.
תנסה להכניס אותו למשתנה אחר. אולי זה הסיבה לעצירה.
זה דורס רק את המצביע. הטרייד הראשון לא מושפע בכלל עד לסיום חייו.
מה ההבדל בין שני Threads באותה תוכנית לבין תוכנית אחת שנפתחה פעמיים? מדוע הSoundPlayer לא נותן כאן וכן נותן כאן?
השאלה מצויינת...
כנראה הוא משותף (Shared) לכל הApplicationDomain בקיצור, פר אפילקציה. אבל אתה לא תיצור נוספת רק להשמע סימולטנית...
לכן עניתי לך מה שעניתי.
פורסם במקור בפורום CODE613 ב20/08/2013 11:03 (+03:00)
עם הפונקצייה System.Media.SoundPlayer כנראה אי אפשר.
תנסה עם DIrectX, או עם המדיה פלייר של Windows.
פורסם במקור בפורום CODE613 ב18/08/2013 11:29 (+03:00)