Modified:
branches/5.0/CHANGES
branches/5.0/Driver/Source/MySqlStream.cs
branches/5.0/Driver/Source/NativeDriver.cs
Log:
sped up LOAD DATA LOCAL INFILE dramatically by bypassing the normal stream processing code in MySqlStream
Modified: branches/5.0/CHANGES
===================================================================
--- branches/5.0/CHANGES 2007-10-25 19:40:48 UTC (rev 1047)
+++ branches/5.0/CHANGES 2007-10-31 21:26:19 UTC (rev 1048)
@@ -18,6 +18,7 @@
using case insensitive semantics and this causes cases where a user orginally
used the wrong case for a user id and then fixed it to still get access denied
errors. (Bug #31433)
+ - improved the speed of load data local infile significantly
Version 5.0.8 8/16/2007
Modified: branches/5.0/Driver/Source/MySqlStream.cs
===================================================================
--- branches/5.0/Driver/Source/MySqlStream.cs 2007-10-25 19:40:48 UTC (rev 1047)
+++ branches/5.0/Driver/Source/MySqlStream.cs 2007-10-31 21:26:19 UTC (rev 1048)
@@ -213,6 +213,15 @@
}
}
+ public void SendEntirePacketDirectly(byte[] buffer, int count)
+ {
+ buffer[0] = (byte)(count & 0xff);
+ buffer[1] = (byte)((count >> 8) & 0xff);
+ buffer[2] = (byte)((count >> 16) & 0xff);
+ buffer[3] = sequenceByte++;
+ baseStream.Write(buffer, 0, count + 4);
+ }
+
/// <summary>
/// StartOutput is used to reset the write state of the stream.
/// </summary>
Modified: branches/5.0/Driver/Source/NativeDriver.cs
===================================================================
--- branches/5.0/Driver/Source/NativeDriver.cs 2007-10-25 19:40:48 UTC (rev 1047)
+++ branches/5.0/Driver/Source/NativeDriver.cs 2007-10-31 21:26:19 UTC (rev 1048)
@@ -563,25 +563,21 @@
/// <param name="filename"></param>
private void SendFileToServer(string filename)
{
- byte[] buffer = new byte[4092];
+ byte[] buffer = new byte[8196];
FileStream fs = null;
+ long len = 0;
try
{
fs = new FileStream(filename, FileMode.Open);
- stream.StartOutput((ulong)fs.Length, false);
-
- long len = fs.Length;
+ len = fs.Length;
while (len > 0)
{
- int count = fs.Read(buffer, 0, 4092);
- stream.Write(buffer, 0, count);
+ int count = fs.Read(buffer, 4, (int)(len > 8192 ? 8192 : len));
+ stream.SendEntirePacketDirectly(buffer, count);
len -= count;
}
-
- // write the terminating packet
- stream.SendEmptyPacket();
- stream.Flush();
+ stream.SendEntirePacketDirectly(buffer, 0);
}
catch (Exception ex)
{
| Thread |
|---|
| • Connector/NET commit: r1048 - in branches/5.0: . Driver/Source | rburnett | 31 Oct |