|
Hello everyone,
Suppose I am using append mode to write to a file using StreamWriter. My application is a long run Windows service. I get the handle of StreamWriter only once during the start of my application by using StreamWriter abc = new StreamWriter (...). I never close the handle abc until application stops, and will use the handle to perform write operations in the runtime of the application.
I only write to the file rarely, for example, there may be no write operation for 2 days or something.
My question is, if I obtain the handle of the StreamWriter too long without any write operations (for example, 2 days or longer), will the handle (or the underlying file) be closed by some parties (e.g. CLR, OS, etc.) -- like timeout of socket?
thanks in advance,
George
|
|
|
|
|
i think Garbage Collector will destroy the object.
|
|
|
|
|
Hi Nouman,
Sorry I made a mistake in my original reply, the abc is a static member of my class. Will it be GCed?
Any updates to my original question?
regards,
George
|
|
|
|
|
No, it will not be garbage collected as long as you have a reference to it.
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
Thanks for your confirmation, Guffa!
regards,
George
|
|
|
|
|
That may depend on wether the file is local or if there is a network layer involved in accessing the file. If it's local, I see no reason why it wold be closed.
However, if you are writing to the file so infrequently, why are you keeping it open? Just open the file when you need to read it, and close it afterwards. That way you don't risk losing any data because the stream is not flushed when the computer crashes...
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
Thanks Guffa,
1.
It is a local file. Why do you think there may be issues for network based file? For example scenario?
2.
The reason why I keep it open is, the content writes to the file depends on ad-hoc client request, if no request, no write operation, if many requests, I need write a lot of stuff. It is impossible to predict the # of request of clients.
regards,
George
|
|
|
|
|
2 - If your application crashes after some requests, you will loose all the text written for the previous requests.
|
|
|
|
|
Thanks N a v a n e e t h,
Each time I write, I will do a flush if the content contains important information. Any comments or updates to my original question?
regards,
George
|
|
|
|
|
George_George wrote: 1.
It is a local file. Why do you think there may be issues for network based file? For example scenario?
If the network connection gets dropped, i.e. hardware problems
George_George wrote: 2.
The reason why I keep it open is, the content writes to the file depends on ad-hoc client request, if no request, no write operation, if many requests, I need write a lot of stuff. It is impossible to predict the # of request of clients.
Ever heard of appending?
using (System.IO.StreamWriter sr = new System.IO.StreamWriter("filename", true))
{
sr.WriteLine("test message");
sr.Flush();
}
will append to the file, not create a new one.
Hope this helps
Bob
Ashfield Consultants Ltd
|
|
|
|
|
Hi Bob,
In your code, each time we need to write, we need to open the file, go to end (append mode) of the file and write, then close.
I think it is a waste if we write frequently -- we need to open only once and close only once if the file is not automatically closed by some parties for no operation in a long time -- this is why I asked this question about optimization of your code.
Any comments?
regards,
George
|
|
|
|
|
George_George wrote: My question is, if I obtain the handle of the StreamWriter too long without any write operations (for example, 2 days or longer), will the handle (or the underlying file) be closed by some parties (e.g. CLR, OS, etc.) -- like timeout of socket?
I don't think so. GC will reclaim the memory only when no references to that object. A better approach would be to open the file when required, write content and close it though.
|
|
|
|
|
Thanks N a v a n e e t h,
Sorry it is my mistake not to describe the whole situation correcly. The abc actually is a static variable, any comments or updates to my original question about whether file will be automatically closed if open too long without any operation?
regards,
George
|
|
|
|
|
George_George wrote: whether file will be automatically closed if open too long without any operation?
I don't think so, but I am not sure though. GC will collect the instance only when there is no one referring the particular object. Since you use a static variable, it's lifetime will be till the application domain unloads. So I guess there won't be any problem.
|
|
|
|
|
Thanks N a v a n e e t h,
Question answered.
regards,
George
|
|
|
|
|
hey im trying to make an app that will log in to facebook ,
im using the following method to establish connection and post my credentials:
<br />
public static void start_post(string strPage, string strBuffer)<br />
{<br />
byte[] buffer = Encoding.ASCII.GetBytes(strBuffer);<br />
<br />
HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(strPage);<br />
WebReq.Method = "POST";<br />
<br />
WebReq.ContentType = "application/x-www-form-urlencoded";<br />
WebReq.ContentLength = buffer.Length;<br />
WebReq.Referer = "http://www.facebook.com/index.php?";<br />
<br />
Stream PostData = WebReq.GetRequestStream();<br />
PostData.Write(buffer, 0, buffer.Length);<br />
PostData.Close();<br />
HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();<br />
Console.WriteLine(WebResp.StatusCode);<br />
Console.WriteLine(WebResp.Server);<br />
<br />
Stream Answer = WebResp.GetResponseStream();<br />
StreamReader _Answer = new StreamReader(Answer);<br />
reply = _Answer.ReadToEnd();<br />
Console.WriteLine(reply);<br />
}<br />
i get the following respond from facebook:
"sorry, we're not cool enough to support your browser. please keep it real with the following browsers: ...."
any idea how to work around this facebook check , as im sending same data as my IE agent i dont know what else will work , asking for your expert help.
thank you.
Net
|
|
|
|
|
udikantz wrote: as im sending same data as my IE agent i dont know what else will work
And just where do you set that? I dont see it anywhere in your code. Try again.
|
|
|
|
|
i set that in a the main class of the project
these are the parameters that i pass to the method , i chenged the email and password to something fake be it looks something like that:
start_post("https://login.facebook.com/login.php", "challenge=e7d654f99268a01kl94007be0e399755&md5pass=1&noerror=1&email=someemail@gmail.com&pass=coolpassword&charset_test=%E2%82%AC%2C%C2%B4%2C%E2%82%AC%2C%C2%B4%2C%E6%B0%B4%2C%D0%94%2C%D0%84");
Net
|
|
|
|
|
I had the same problem and i used the line
WebReq.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (.NET CLR 3.5.30729)";
it makes the server think that its running FireFox
|
|
|
|
|
hi this code is running fine Facebook Login
protected void Page_Load(object sender, EventArgs e)
{
string strBuffer = "email=xxxxxxxxxxx&pass=xxxxxxxxxxxxx;login=Login";
start_post(strBuffer);
}
public void start_post(string strBuffer)
{
byte[] buffer = System.Text.Encoding.ASCII.GetBytes(strBuffer);
HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create("https://login.facebook.com/login.php?m&next=http%3A%2F%2Fm.facebook.com%2Fhome.php");
WebReq.Method = "POST";
WebReq.ContentType = "application/x-www-form-urlencoded";
WebReq.ContentLength = buffer.Length;
WebReq.Referer = "http://www.facebook.com/index.php?";
Stream PostData = WebReq.GetRequestStream();
PostData.Write(buffer, 0, buffer.Length);
PostData.Close();
using (HttpWebResponse response = (HttpWebResponse)WebReq.GetResponse())
{
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
Response.Write(reader.ReadToEnd());
}
}
}
modified on Monday, November 2, 2009 7:32 AM
|
|
|
|
|
Hi,
I have an TCP server client application, with client running on the WM 6.0.
I have using TcpClient class to establish connection to my server and send data. If I am using wifi the code is working fine, but if I am trying to use GPRS its not working. I think I have to start GPRS connection first. Can someone please tell me how to fix this.
here is the client side code
public class Client
{
public void GpsClient(string Ostring)
{
TcpClient socketForServer;
try
{
socketForServer = new TcpClient("energystudy.dyndns.org", 13000);
}
catch
{
Console.WriteLine("Failed to connect to server at {0}:13000", "energystudy.dyndns.org");
return;
}
NetworkStream networkStream = socketForServer.GetStream();
System.IO.StreamReader streamReader = new System.IO.StreamReader(networkStream);
System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(networkStream);
try
{
string outputString;
// read the data from the host and display it
{
outputString = streamReader.ReadLine();
//Console.WriteLine(outputString);
streamWriter.WriteLine(Ostring);
//Console.WriteLine("Client Message");
streamWriter.Flush();
}
}
catch
{
Console.WriteLine("Exception reading from Server");
}
networkStream.Close();
}
}
|
|
|
|
|
I'm trying to understand the different compiler options in C#.
What exactly is JIT? Is JIT implemented by default or is there a different "default" compiler?
I'm not quite clear on the C# compiler options, relationships and differences. Please explain.
|
|
|
|
|
I recommend doing some reading on the MSDN site. JIT stands for just in time. The C# compiler creates machine code for each part of your program, when it gets run for the first time. There's no other options I know of, excepting that you can buy expensive tools that compile to machine code ( and thus do not need the .NET framework ) all in one go.
Christian Graus
Please read this if you don't understand the answer I've given you
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|
|
So each language has its own compileer, right? One for C++, one for VB, one for C#? I assume that each of these compilers has its own JIT functionality. Is this correct?
So is JIT simply a feature of a compiler rather than a type of compiler?
I have read that the C++ compiler supports function inlining but the C# compiler does not. Has MS updated the C# compiler to support function inlining or does function inlining still not exist in the C# compiler? If not then why not?
|
|
|
|
|
Member 3919049 wrote: I assume that each of these compilers has its own JIT functionality. Is this correct?
No, C++ is a different kettle of fish, unless you use C++/CLI. The compiler is actually in the framework.
Member 3919049 wrote: I have read that the C++ compiler supports function inlining but the C# compiler does not
Possibly. One thing to be clear on here - C++ function inlining does not mean you control it. The compiler can choose to inline something without you asking for that, and it can ignore your request. This is part of the c++ standard.
Member 3919049 wrote: Has MS updated the C# compiler to support function inlining or does function inlining still not exist in the C# compiler?
What you need to understand is, the C# compiler works totally differently to the C++ one. There is no inlining in C#.
Christian Graus
Please read this if you don't understand the answer I've given you
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|