|
I think that object are storing the the data using two memory byte, please check the next example:
Module Module1
Sub Main()
Dim ObjMemoryStream As System.IO.MemoryStream
ObjMemoryStream = New System.IO.MemoryStream(1073741825)
System.Console.WriteLine("Capacity: {0}", ObjMemoryStream.Capacity.ToString())
System.Console.WriteLine("Length: {0}", ObjMemoryStream.Length.ToString())
Dim j As Integer
For i As Integer = 0 To 1073741824 Step 1
If (i Mod 256) = 0 Then j = 0 Else j = i Mod 256
ObjMemoryStream.WriteByte(j)
Next i
System.Console.WriteLine("Capacity: {0}", ObjMemoryStream.Capacity.ToString())
System.Console.WriteLine("Length: {0}", ObjMemoryStream.Length.ToString())
Dim ObjFileStream As System.IO.FileStream
ObjFileStream = System.IO.File.Create("C:\TEST.txt", 1024)
Dim ObjBinaryWriter As System.IO.BinaryWriter
ObjBinaryWriter = New System.IO.BinaryWriter(ObjFileStream, System.Text.Encoding.ASCII)
ObjMemoryStream.Position = 0
ObjBinaryWriter.Write(ObjMemoryStream.ToArray())
ObjBinaryWriter.Flush()
ObjBinaryWriter.Close()
System.Console.ReadKey()
End Sub
End Module
|
|
|
|
|
No, it's not. What you're storing is irrelevant. If you keep exceeding the capacity of the MemoryStream, it will keep allocating new arrays, twice as large as the last, until it can't grow any more (2GB).
These are the sizes the MemoryStream went through after you created it and keep adding more and more data to it:
256
512
1024
2048
4096
8192
16384
32768
65536
131072
262144
524288
1048576
2097152
4194304
8388608
16777216
33554432
67108864
134217728
268435456
536870912
1073741824
2147483648
Oh, look at that. It managed to hit 2GB in size right after you added 1073741824 bytes of information to it. It's allocating bigger and bigger blocks of memory because it has no way of knowing how big to make the array to that it fits your data perfectly.
If you want to keep it from getting to 2GB of memory, allocate the MemoryStream with the expected size as a parameter, say 1.5GB:
Dim ms As New MemoryStream(1610612736)
Now, if you exceed that, the MemoryStream will try to reallocate itself using twice the size you initially specified and that will lead to an OutOfMemory exception.
You can NOT look in Task Manager to see how much memory your app is using. It's telling you how much memory the .NET CLR as RESERVED for your app. This will always be larger than what your app is actually using.
|
|
|
|
|
Thank you very mush.
|
|
|
|
|
I assume you're looking at the process size when you hit the ReadKey().
Your ObjMemoryStream will be 1GB + 1 byte big (you start from 0).
Then you evaluate ObjMemoryStream.ToArray(). That will create an array (Help: "This method returns a copy of the contents of the MemoryStream as a byte array"), also of size 1GB-odd. (You don't know when .NET will garbage-collect that, and process sizes often don't shrink anyway.)
Don't convert your memory stream to an array! Try something like ObjMemoryStream.CopyTo() instead.
|
|
|
|
|
Can anyone help me to develope Gantt chart in resources view type. I want to show the various task assign to employee in a particular duration. Please share me code for the same.
-Angel
|
|
|
|
|
Can anyone suggest how to work with asp.net membership configuration and database?
|
|
|
|
|
|
Im no sure if im in the correct discussion but im am trying to create a stupid and simple project. i have create a database and i connected it with VB. i have create a menustrip with "table" and "data".
the "table" has a sub-menu that says "Inventory show" and "Customer_Information show". When you click on the "Inventory show" in the sub-menu...how do you write the code to show only "Inventory" (from the database) in the form? sorry if i explained confusing, my english is off a little bit.
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me._02_Customer_InformationTableAdapter.Fill(Me.GradebookDataSet._02_Customer_Information)
Me._01_InventoryTableAdapter.Fill(Me.GradebookDataSet._01_Inventory)
End Sub
Private Sub InventoryToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InventoryToolStripMenuItem.Click
End Sub
Private Sub Customer_InformationToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InventoryToolStripMenuItem.Click
End Sub
Private Sub ExitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExitToolStripMenuItem.Click
End
End Sub
End Class
|
|
|
|
|
CaseLost wrote: Depends on what you want to do with that data. If you have a datagridview, you could load the data and assign it to it's datasource-property.
CaseLost wrote: how do you write the code to show only "Inventory" (from the database) in the
form? Not so fast; you'll need something to display it ON; a form, a grid, labels. Then you'll need to load your data (using SQL, restricting the data using a WHERE clause). After that, you can put your data on that form and display it.
If you haven't displayed anything from a database before, I suggest you put this project on hold and try some examples first. There's an example here[^]
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Hello guys.i need help with this query. i am not very good at this kind of query.
wh is wrong with it? missing ant ) or ' ?
Hereis my code:
strsql = "update membercars set "
strsql = strsql & "make= '" & txtmake.Text & "', "
strsql = strsql & "model= '" & txtmodel.Text & "', "
strsql = strsql & "color= '" & txtcolor.Text & "', "
strsql = strsql & "tag= '" & txttag.Text & "', "
strsql = strsql & "memberid= " & Val(txtserial.Text) & " where serial = " & Val(txtcarserial.Text)
strsql = strsql & " and serial = " & Val(txtserial.Text) & ") "
|
|
|
|
|
EVERYTHING is wrong with it.
Google for "SQL Injection attack" to find out why what you're doing is wrong and then Google for "C# parameterized queries" for all kinds of examples on how to build your query without using string concatenation.
Oh, and you have a closing ")", but no opening "(".
|
|
|
|
|
|
Here's another SQL Injection reference, in case you weren't convinced by the other messages:
http://www.troyhunt.com/2013/07/everything-you-wanted-to-know-about-sql.html[^]
To fix your code:
command.CommandText = "update membercars set make = @make, model = @model, color = @color, tag = @tag, memberid = @memberid where serial = @serial";
command.Parameters.AddWithValue("@make", txtmake.Text)
command.Parameters.AddWithValue("@model", txtmodel.Text)
command.Parameters.AddWithValue("@color", txtcolor.Text)
command.Parameters.AddWithValue("@tag", txttag.Text)
command.Parameters.AddWithValue("@memberid", txtserial.Text)
command.Parameters.AddWithValue("@serial", txtcarserial.Text)
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
This is your query btw (changed layout for readabillity);
update membercars
set make= '1'
, model= 'super'
, color= 'green'
, tag= 'Youre it!'
, memberid= txtserial
where serial = txtcarserial
and serial = txtserial If txtcarserial and txtserial do not match, no records will be returned. The SQL query syntax is the same, regardless of the calling language.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Thank you so much guys. It worked and it's much easier than the method that i wrote before.
cmd.Connection = mcon
cmd.CommandText = "update membercars set make=@make, model=@model, color=@color, tag= @tag where memberid=@memberid;"
cmd.Parameters.AddWithValue("@make", txtmake.Text)
cmd.Parameters.AddWithValue("@model", txtmodel.Text)
cmd.Parameters.AddWithValue("@color", txtcolor.Text)
cmd.Parameters.AddWithValue("@tag", txttag.Text)
cmd.Parameters.AddWithValue("@memberid", txtserial.Text)
cmd.ExecuteNonQuery()
Just one more question. I am writing an insert query.
cmd.CommandText = "insert into membercars(make, model, plate, color, tag) values (@make, @model, @plate, @color, @tag) where memberid=@memberid;"
cmd.Parameters.AddWithValue("@make", txtmake.Text)
cmd.Parameters.AddWithValue("@model", txtmodel.Text)
cmd.Parameters.AddWithValue("@plate", txtplate.Text)
cmd.Parameters.AddWithValue("@color", txtcolor.Text)
cmd.Parameters.AddWithValue("@tag", txttag.Text)
cmd.Parameters.AddWithValue("@memberid", txtserial.Text)
cmd.ExecuteNonQuery()
it's giving me an eror: incorrect syntax near where. what's the error?
|
|
|
|
|
Member 10506215 wrote: what's the error? An INSERT does not contain a WHERE -clause. What would/should the "where" do? Syntax can be found here[^].
Get a good book on SQL; this looks like trial and error.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
i'll tell you the details.
i have 2 tables: members and membercars. i need to be able to add more than one car for one member. so i thought if i added the second car, and i put a condition--where memberid=txtserial.text--the memberid is for the membercars and the txtserial.text is the serial for a member(autincremented).
So any suggestions?
|
|
|
|
|
You can't use the "where" clause in an insert. The computer will simply not accept it, regardless of your intention. (Yes, it does accept it in a subselect, but that is not the case here)
CAR
carId
PERSON
personId
CAROWNERS
carId
personId
Or, with data;
CAR
12
14
167
PERSON
A
B
C
CAROWNERS
12, A
167, A
14, B
If you want to register a car to a person, insert a record into "CAROWNERS" containing both Id's.
Member 10506215 wrote: so i thought if i added the second car, and i put a condition That's not how it works; commands have a specific syntax, you don't make one up and assume it works.
Get a book on SQL. Get it today, before I see a question on joining those records back together.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Done
i need to add multiple cars for just one member. Here is my code for saving cars:
Dim cmd As New SqlCommand
cmd.Connection = mcon
cmd.CommandText = "insert into membercars(serial, memberid, make, model, plate, color, tag) values (@serial, @memberid, @make, @model, @plate, @color, @tag);"
cmd.Parameters.AddWithValue("@serial", txtserial.Text)
cmd.Parameters.AddWithValue("@memberid", txtserial.Text)
cmd.Parameters.AddWithValue("@make", txtmake.Text)
cmd.Parameters.AddWithValue("@model", txtmodel.Text)
cmd.Parameters.AddWithValue("@plate", txtplate.Text)
cmd.Parameters.AddWithValue("@color", txtcolor.Text)
cmd.Parameters.AddWithValue("@tag", txttag.Text)
cmd.ExecuteNonQuery()}
fillgrid()
And this for saving mambers:
cmd.Connection = mcon
strsql = "insert into members "
strsql = strsql & "(name, "
strsql = strsql & "familyname, "
strsql = strsql & "address, "
strsql = strsql & "mobile, "
strsql = strsql & "phone, "
strsql = strsql & "fax, "
strsql = strsql & "email, "
strsql = strsql & "space, "
strsql = strsql & "timezone, "
strsql = strsql & "website) "
strsql = strsql & "values ('" & txtname.Text & "', "
strsql = strsql & "'" & txtfamilyname.Text & "', "
strsql = strsql & "'" & txtaddress.Text & "', "
strsql = strsql & "'" & txtmobile.Text & "', "
strsql = strsql & "'" & txtphone.Text & "', "
strsql = strsql & "'" & txtfax.Text & "', "
strsql = strsql & "'" & txtemail.Text & "', "
strsql = strsql & "'" & txtspace.Text & "', "
strsql = strsql & Val(cmbtimezone.SelectedValue) & ", "
strsql = strsql & "'" & txtwebsite.Text & "') "
strsql += " SELECT IDENT_CURRENT('members')"
cmd.CommandText = strsql
txtsearch.Text = ""
txtserial.Text = cmd.ExecuteScalar().ToString()
Thank you for your replies
|
|
|
|
|
The first query is a lot safer than your second one; pasting strings together to create a query is a sin.
Any reason why you're not using parameters there like in the first query?
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
yes i know.
i tried to do it like this, but i have an error.
Dim cmd As New SqlCommand
cmd.Connection = mcon
cmd.CommandText = "insert into members(serial, name, familyname, address, phone, mobile, fax, email, website, space, timezone) values (@serial, @name, @familyname, @address, @phone, @mobile, @fax, @email, @website, @space, @timezone) ;"
cmd.Parameters.AddWithValue("@serial", txtserial.Text)
cmd.Parameters.AddWithValue("@name", txtname.Text)
cmd.Parameters.AddWithValue("@familyname", txtfamilyname.Text)
cmd.Parameters.AddWithValue("@address", txtaddress.Text)
cmd.Parameters.AddWithValue("@phone", txtphone.Text)
cmd.Parameters.AddWithValue("@mobile", txtmobile.Text)
cmd.Parameters.AddWithValue("@fax", txtfax.Text)
cmd.Parameters.AddWithValue("@email", txtemail.Text)
cmd.Parameters.AddWithValue("@website", txtwebsite.Text)
cmd.Parameters.AddWithValue("@space", txtspace.Text)
cmd.Parameters.AddWithValue("@timezone", cmbtimezone.Text)
cmd.ExecuteNonQuery()
fillgrid()
How am i going to set the identity to txtserial.text? in the parameters method?
|
|
|
|
|
Member 10506215 wrote: How am i going to set the identity to txtserial.text? You did not set it in the previous query where you concatenate strings. Why would you need to set it now?
The identity is generated by the database at the moment you perform the insert; you don't have to set it. You would like to fetch it - that's what the SELECT IDENT_CURRENT('members') would do.
Stop trying and start reading. If you continue using trial and error, you'll be building some things you're going to regret later.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Kindly help me by posting the code for uploading data from MySql Database into MSProject using C#.
Thanks and Regards
badarinarayan@live.com
|
|
|
|
|
|
Hello,
I want to read a packet from serial port,
I don't know the length of the packet,
so I have to wait a timeout for the first byte
and then I have to read all next bytes.
I supersed class
SerialPort
and I write the method
Receive
in ".NET Framework 4 Client Profile".
I try to use this code but
sometimes
Receive
works well, sometimes doesn't work
public class PortaCom : SerialPort
{
int timeout = 0;
public PortaCom(string portName, int baudRate, int timeout)
: base(portName, baudRate)
{
this.timeout = timeout;
base.Open();
}
public byte[] Receive()
{
List<Byte> ByteList = new List<Byte>();
DateTime Now = DateTime.Now;
base.ReadTimeout = 1;
int FirstByte = -1;
while (FirstByte == -1)
{
if (DateTime.Now - Now > TimeSpan.FromMilliseconds(timeout))
throw new TimeoutException();
try { FirstByte = base.ReadByte(); }
catch (TimeoutException) { }
}
int NextByte = FirstByte;
while (NextByte != -1)
{
try
{
Byte _NextByte = (Byte)NextByte;
ByteList.Add(_NextByte);
NextByte = base.ReadByte();
}
catch (TimeoutException)
{
return ByteList.ToArray();
}
}
return ByteList.ToArray();
}
}
Can someone help me ?
|
|
|
|
|