|
error1408 wrote: if you had to search 50000 lines of code for the word example as fast as possible, with every kind of whitespace in the line, which method would you prefer.
REGEX
or
myString.Trim() == "example"
In this case RegEx would be the only one that works.
The second example would only ever return false.
|
|
|
|
|
string.IndexOf
[ My Blog] "Visual studio desperately needs some performance improvements. It is sometimes almost as slow as eclipse." - Rüdiger Klaehn "Real men use mspaint for writing code and notepad for designing graphics." - Anna-Jayne Metcalfe
|
|
|
|
|
Why not try it out for yourself and find out. Create a document containing the phrase "The quick brown fox jumps over the lazy fox" by cutting and pasting repeatedly; it won't take you long to knock up a 50000 line document with this in. Now, put a seed word in the middle somewhere - call it seed for instance.
Then, run a program that uses both versions against this document and see which method is faster.
Deja View - the feeling that you've seen this post before.
|
|
|
|
|
Ok i wrote a little app that compares the two methods.
I found out, that testing a file with 60000 lines 30 times took my pc about a second with this method:
<br />
using (StreamReader rIn = new StreamReader("test.txt"))<br />
{<br />
string line = "";<br />
while ((line = rIn.ReadLine()) != null)<br />
{<br />
if (line.Trim() == "{{{tcl")<br />
{<br />
return true;<br />
}<br />
}<br />
rIn.Close();<br />
<br />
}<br />
return false;<br />
and about 9 seconds with the regex:
<br />
using (StreamReader rIn = new StreamReader("test.txt"))<br />
{<br />
string line = "";<br />
Regex reg = new Regex(@"\s*\{\{\{tcl\s*");<br />
while ((line = rIn.ReadLine()) != null)<br />
{<br />
if (reg.IsMatch(line))<br />
{<br />
return true;<br />
}<br />
}<br />
rIn.Close();<br />
}<br />
return false;<br />
Thats a BIG difference.
|
|
|
|
|
A well deserved 5 for answering your own question.
Deja View - the feeling that you've seen this post before.
|
|
|
|
|
I am writing some code which calls a web service that i wrote. Works just fine when i pass in all of the parameters via the method call (names have been changed, duh):
public void SetOption(string A, string B, int C)<br />
{<br />
this.Invoke("SetOption", new object[] { A, B, C });<br />
}
However, when i try to set "A" from within the method:
public void SetOption(string B, int C)<br />
{<br />
string A = (from global source which has been verified to be active);<br />
this.Invoke("SetOption", new object[] { A, B, C });<br />
}
This sends a null object to the web service, which gives it a headache.
Has anyone run in to this problem before? (when i simply switch it back to the passed in parameter, it works fine again)
-Jeremy A. Cunningham
|
|
|
|
|
Why your using invoke to call another function in your web service is beyond me.. . But, you could try just:
public void SetOption(string B, int C)<br />
{<br />
this.Invoke("SetOption", new object[] { ([A] from global source which has been verified to be active), B, C });<br />
}
Just specifically put the A value in with the arguments instead of making a new string instance.
|
|
|
|
|
Let me clarify, the invoke is being called from the web service client. (entirely seperate visual studio project)
I receive the same results using your suggestion. (a null object is passed to the web service instead of the string)
-Jeremy A. Cunningham
|
|
|
|
|
Try to seperate the web method into two different methods. One with as an internal helper with all of the logic.
public void SetOption(string a, string b, string c);
private void HelpSetOption(string a, string b, string c);
Although, a soap extension may work better for parameter replacement.
Need a C# Consultant? I'm available.
Happiness in intelligent people is the rarest thing I know. -- Ernest Hemingway
|
|
|
|
|
I tried this as well while testing. The system then complains about accessibility, and won't function until i make it public again. I tried with "protected" as well.
Thank you all for taking a look at this.
-Jeremy A. Cunningham
|
|
|
|
|
The web method must be public however :
[WebMethod]
public void Foo{string a, string b, string c}{
HelpFoo("test", b, c);
}
private void HelpFoo(string a, string b, string c){
...
}
Should work just fine.
Need a C# Consultant? I'm available.
Happiness in intelligent people is the rarest thing I know. -- Ernest Hemingway
|
|
|
|
|
A private helper function isn't useful for objects outside of the class. And as you have pointed out, the web method has to be pubilc, or:
System.ArgumentException: SetOption Web Service method name is not valid.
So i have two public functions, and it seems i'm just stuck at that.
-Jeremy A. Cunningham
|
|
|
|
|
Then make it public or internal and don't decorate it with the WebMethod attribute.
Realistically all web method calls should be immediate proxy calls to another class anyway.
Need a C# Consultant? I'm available.
Happiness in intelligent people is the rarest thing I know. -- Ernest Hemingway
|
|
|
|
|
Greetings,
I will try to describe this problem in as much details as I can.
Task: Create N HTML page withing a folder-structure based on N grandparent-parent-child relationships.
Data structure:
TopicID - int
ParentTopicID int
TopicName - nvarchar(4000)
Sample data
TopicID ParentTopicID TopicName
0 0 Computers
1 1 Programming
2 1 C#
3 1 C++
4 1 Java
5 1 Perl
6 0 Operating systems
7 6 Windows 2000
8 6 Windows XP
9 6 Unix
Output which to achieve:
Folder: Computer
File: Computers.html
Contents:
Programming
Operating Systems
Folder: Computer/Programming
File: Programming.html
Contents:
C#
C++
Java
Perl
and so forth....
The question is, what is the best algorithm to use to achive the above results?
Thank you very much in advanced!
Arsen
|
|
|
|
|
Smells a bit like homework...
|
|
|
|
|
VarChar255 wrote: The question is, what is the best algorithm to use to achive the above results?
I suggest the critical thinking algorithm. Good luck on your assignment, it's an interesting one.
|
|
|
|
|
If the datasource for this is SQL Server 2005, then take a look at using Common Table Expressions (CTE). They will sort this out for you no problem.
Deja View - the feeling that you've seen this post before.
|
|
|
|
|
No not homework at all... actually one of my developers is having trouble with this, he wrote the code but i'd like to get some opinions from others on what patterns they use.
Arsen
|
|
|
|
|
VarChar255 wrote: No not homework at all... actually one of my developers is having trouble with this, he wrote the code but i'd like to get some opinions from others on what patterns they use.
OK, lets flip this around then. What patterns would you use and we'll tell you whether we agree and which of your options sounds like the best way to us!
If you're telling the truth, and this really isn't homework, then you'll be willing and able to provide some responses. More likely we will see no response from you whatsoever.
|
|
|
|
|
Here is what my developer has implemented (excerpts)
void ProcesstopicChildren(DataTable dttopic)
{
similar while loop, but calling processtopic within whileloop.
}
main()
{
DataTable dtChildtopic;
DataTable dtParenttopic;
ItopicManager topicManager; // this is the SQL connector to call the SQL.
int ParenttopicID;
ParenttopicID = 8; // Just as a test
dtParenttopic = topicManager.GettopicView(ParenttopicID);
while(dttopic.Rows.Count > 0)
{
ParenttopicID = int.Parse(dtParenttopic.Rows[ParenttopicCount]["ParenttopicID"].ToString());
dttopic = topicManager.GettopicView(ParenttopicID);
ParenttopicCount++;
}
}
|
|
|
|
|
Jus want to know which one wil be performance wise better either static or session variable?
If suppose i want to maintain one instance specific data(E.g: username) which one i should prefer to go for?
How does the static variable stored in Memory?
I believe static variable will be maintained as a single copy in Application domain.if it true then how does it allows to store instance specific data.
Please clarify me..
Regards,
Murugs.
|
|
|
|
|
P.Murugs wrote: Please clarify me..
There are actually very fine articles beyond the documentation for ASP.NET Application and Session objects on MSDN. Have you read the documentation and articles? If you find them confusing please explain which specific part is not clear?
|
|
|
|
|
Yes..i have read some articles.
My query is if both the session and static variable allows us to store instance specific data's which one we opt to go for?
Tell me in terms of performance..
Thanks..
|
|
|
|
|
I can't open any page in my website because they also auto switch to login.aspx page ? Why? Here is my code in file login.aspx :
private bool ValidateUser( string userName, string passWord )
{
SqlConnection conn;
SqlCommand cmd;
string lookupPassword = null;
// Check for invalid userName.
// userName must not be null and must be between 1 and 15 characters.
if ( ( null == userName ) || ( 0 == userName.Length ) || ( userName.Length > 15 ) )
{
System.Diagnostics.Trace.WriteLine( "[ValidateUser] Input validation of userName failed." );
return false;
}
// Check for invalid passWord.
// passWord must not be null and must be between 1 and 25 characters.
if ( ( null == passWord ) || ( 0 == passWord.Length ) || ( passWord.Length > 25 ) )
{
System.Diagnostics.Trace.WriteLine( "[ValidateUser] Input validation of passWord failed." );
return false;
}
try
{
// Consult with your SQL Server administrator for an appropriate connection
// string to use to connect to your local SQL Server.
conn = new SqlConnection( "server=localhost;Integrated Security=SSPI;database=HopNhacProj" );
conn.Open();
// Create SqlCommand to select pwd field from users table given supplied userName.
cmd = new SqlCommand( "Select Matkhau from tblThanhVien where TenDn=@userName", conn );
cmd.Parameters.Add( "@userName", SqlDbType.VarChar, 25 );
cmd.Parameters["@userName"].Value = userName;
// Execute command and fetch pwd field into lookupPassword string.
lookupPassword = (string) cmd.ExecuteScalar();
// Cleanup command and connection objects.
cmd.Dispose();
conn.Dispose();
}
catch ( Exception ex )
{
// Add error handling here for debugging.
// This error message should not be sent back to the caller.
System.Diagnostics.Trace.WriteLine( "[ValidateUser] Exception " + ex.Message );
}
// If no password found, return false.
if ( null == lookupPassword )
{
// You could write failed login attempts here to event log for additional security.
//lblMsg.Visible=false;
return false;
}
// Compare lookupPassword and input passWord, using a case-sensitive comparison.
return ( 0 == string.Compare( lookupPassword, passWord, false ) );
}
private void btnDangNhap_Click(object sender, System.Web.UI.ImageClickEventArgs e) //button login
{
if (ValidateUser(txtUserName.Text,txtUserPass.Text) )
{
FormsAuthenticationTicket tkt;
string cookiestr;
HttpCookie ck;
tkt = new FormsAuthenticationTicket(1, txtUserName.Text, DateTime.Now,
DateTime.Now.AddMinutes(30), chkPersistCookie.Checked, "your custom data");
cookiestr = FormsAuthentication.Encrypt(tkt);
ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
if (chkPersistCookie.Checked)
ck.Expires=tkt.Expiration;
ck.Path = FormsAuthentication.FormsCookiePath;
Response.Cookies.Add(ck);
string strRedirect;
strRedirect = Request["ReturnUrl"];
if (strRedirect==null)
strRedirect = "~/default.aspx";
Session["userName"] = txtUserName.Text;
Response.Redirect(strRedirect, true);
}
else
{
//Response.Redirect("../SubPages/Login.aspx", true);
lblMsg.Visible = true;
lblMsg.Text = "Tên đăng nhập hoặc mật khẩu không hợp lệ !";
txtUserName.Text = "";
txtUserPass.Text = "";
}
}
nothing
|
|
|
|
|
whale84 wrote: Why?
Indeed. What actually happens when the code executes? That might explain the "why", don't you think?
|
|
|
|