相关疑难解决方法(0)

Sql批量复制内存问题

我们在C#中使用SqlBulk Copy类.在sql中插入批量数据.我们有一张表,里面有1000万条记录.

我们在循环中以10,000个批量插入数据

我们正面临物理内存问题.内存增加而且不会减少.

以下是我们的代码.我们如何在使用sql批量复制时释放内存,或者是否有其他方法可以进行批量插入.

using (System.Data.SqlClient.SqlBulkCopy bulkCopy = new System.Data.SqlClient.SqlBulkCopy(SQlConn,SqlBulkCopyOptions.TableLock,null))
{
    //bulkCopy = new System.Data.SqlClient.SqlBulkCopy(SQlConn);
    bulkCopy.DestinationTableName = DestinationTable;
    bulkCopy.BulkCopyTimeout = 0;
    bulkCopy.BatchSize = dt1.Rows.Count;
    Logger.Log("DATATABLE FINAL :" + dt1.Rows.Count.ToString(), Logger.LogType.Info);
    if (SQlConn.State == ConnectionState.Closed || SQlConn.State == ConnectionState.Broken)
        SQlConn.Open();
    bulkCopy.WriteToServer(dt1); //DataTable
    SQlConn.Close();
    SQlConn.Dispose();
    bulkCopy.Close();
    if (bulkCopy != null)
    {
        ((IDisposable)bulkCopy).Dispose();
    }                        
}
Run Code Online (Sandbox Code Playgroud)

这里更新完整的代码.

try
        {

            using (SqlConnection SQlConn = new SqlConnection(Common.SQLConnectionString))
            {


                DataTable dt1 = FillEmptyDateFields(dtDestination);

                //SqlTableCreator ObjTbl = new SqlTableCreator(SQlConn);

                //ObjTbl.DestinationTableName = DestinationTable;
                using (System.Data.SqlClient.SqlBulkCopy bulkCopy = new …
Run Code Online (Sandbox Code Playgroud)

c# sql sql-server

4
推荐指数
1
解决办法
6351
查看次数

C#CA2000在丢失范围之前处置对象

这是我的代码,它给了我CA2000"new DataTable()..."和"new DataColumn()..."

usersDS.Tables.Add(new DataTable()
{
    TableName = "Users",
    Columns = { new DataColumn() { ColumnName = "Handle", DataType = typeof(string) }, new DataColumn() { ColumnName = "Nickname" ,DataType = typeof(string) } }
});
Run Code Online (Sandbox Code Playgroud)

是否可以在不声明变量的情况下进行修复?

c# optimization analysis ca2000

4
推荐指数
1
解决办法
3173
查看次数

实现IDisposable对不需要它的类的影响?

我再次运行静态分析检查,我得到了100多个唠叨

Label foo = new Label(); //Where this is an ASP.NET web forms label
Run Code Online (Sandbox Code Playgroud)

我是否需要在这些网络表单标签上调用dispose?另外,页面生命周期的后期是否可以安全地调用Dispose?如果一个类实现了IDisposable,但实际上没有做任何事情,那么不调用dispose有什么危害吗?

(是的,我已经读过关闭连接是一件好事,使用块也是一件好事.)

DataSet是另一个似乎因为莫名其妙的原因而实现IDisposable的类.

.net asp.net idisposable

3
推荐指数
1
解决办法
823
查看次数

.NET垃圾收集行为(使用DataTable obj)

我想知道为什么在创建一个非常简单的DataTable然后将其设置为null后,垃圾收集不会清除该DataTable使用的所有内存.这是一个例子.变量Before应该等于Removed但它不是.

{
 long Before = 0, After = 0, Removed = 0, Collected = 0;

 Before = GC.GetTotalMemory(true);
 DataTable dt = GetSomeDataTableFromSql();
 After = GC.GetTotalMemory(true);
 dt = null;
 Removed = GC.GetTotalMemory(true);
 GC.Collect();
 Collected = GC.GetTotalMemory(true);
}
Run Code Online (Sandbox Code Playgroud)

给出以下结果.

Before = 388116
After = 731248
Removed = 530176
Collected = 530176
Run Code Online (Sandbox Code Playgroud)

c# memory datatable garbage-collection

3
推荐指数
2
解决办法
2329
查看次数

退出WP应用程序时是否需要关闭SQLite连接?

App.xaml.cs我的通用应用程序中,我打开了一个SQLConnection.我没有关闭连接.到目前为止它并没有给我带来麻烦.但这是正确的方式吗,我们可以这样离开吗?

如果我们要关闭连接(Dispose()因为我没有看到关闭函数)我们在哪里关闭?在App_Closing

编辑

这就是我在App.xaml.cs中打开连接的方式

public static SQLiteConnection conn;
public void LoadDatabase()
    {
        conn = new SQLiteConnection( "JusWriteDB.db");

        string sql = @"CREATE TABLE IF NOT EXISTS Folder (FolderCompletedStatus INTEGER, FolderPriority INTEGER, PenColor INTEGER,                                                         FolderText TEXT, FolderUUID TEXT PRIMARY KEY NOT NULL );";
        using (var statement = conn.Prepare(sql))
        {
            try
            {
                statement.Step();
            }
            catch(Exception)
            {

            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

而且(在某些其他文件中)我需要访问此连接,更新表或插入.我通过App.xaml.cs中定义的公共变量访问它

 var db = App.conn;
 string sql = "SELECT * from Folder Where FolderSyncStatus = 'Del'; ";
 try …
Run Code Online (Sandbox Code Playgroud)

c# sqlite windows-phone-8 win-universal-app

0
推荐指数
1
解决办法
797
查看次数