我正在使用BackGroundWorker类在sqlserver中插入一些值.我在这里循环插入值.我正在使用以下代码
public void bw_Convert_DoWork(object sender, DoWorkEventArgs e)
{
e.Result = e.Argument;
for (int i = 0; i < fTable.Rows.Count; i++)
{
try
{
SqlCommand cmd = new SqlCommand("INSERT INTO TBL_CDR_ANALYZER (LNG_UPLOAD_ID, DAT_START, LNG_DURATION, INT_DIRECTION, INT_CALL_DATA_TYPE, \n" +
"TXT_TARGET_NUMBER, TXT_OTHER_PARTY_NUMBER, TXT_TARGET_IMSI, TXT_TARGET_IMEI, TXT_TARGET_CELL_ID, TXT_ROAMING_NETWORK_COMPANY_NAME) VALUES \n" +
"(@UPLOAD_ID, @START_DATE, @DURATION, @DIRECTION, @CALL_TYPE, @TARGET_NUMBER, @OTHER_PARTY_NUMBER, @IMSI, @IMEI, @CELL_ID, @ROAMING_NAME)", sqlCon);
cmd.Parameters.Add("@UPLOAD_ID", SqlDbType.Int).Value = 1;
cmd.Parameters.Add("@START_DATE", SqlDbType.DateTime).Value = fTable.Rows[i]["CallDate"];
cmd.Parameters.Add("@DURATION", SqlDbType.Int).Value = fTable.Rows[i]["CallDuration"];
cmd.Parameters.Add("@DIRECTION", SqlDbType.Int).Value = GetCallDirection(fTable.Rows[i]["CallDirection"].ToString());
cmd.Parameters.Add("@CALL_TYPE", SqlDbType.Int).Value = GetCallType(fTable.Rows[i]["CallType"].ToString());
cmd.Parameters.Add("@TARGET_NUMBER", SqlDbType.VarChar, …Run Code Online (Sandbox Code Playgroud) 我通过非常简单的代码进行研究,并且一直看到数据表的dispose()结果
以下是代码
DataTable dt= new Datatable();
SqlCommand Cmd = new SqlCommand("sp_getData",SqlCon);
SqlCommand.CommandType= CommandType.StroedProcedure;
SqlCon.Open();
sqlDataReader dr= cmd.ExecuteReader();
dt.Load(dr);
SqlCon.Close();
grdView.DataSource =dt;
dt.Dispose() // Here I dispose the table as it is no use for me & wanna memory free from this
Run Code Online (Sandbox Code Playgroud)
但在处理掉数据表之后我仍然发现它仍然显示RowCount = 10k.
Dispose()方法是不是释放内存并使对象为null?
我怎样才能使它成为null或释放这个对象占用的内存?
我有一个列调用者和被调用者的表,其中包含以下值
caller callee
999 888
888 999
999 555
555 333
555 999
Run Code Online (Sandbox Code Playgroud)
现在我想只返回单行
caller1 caller2 count
999 888 2
999 555 1
555 333 1
555 999 2
Run Code Online (Sandbox Code Playgroud) 我们一直致力于为Android平台开发服务.
在我们的服务中,我们需要每隔一分钟将GPS数据(Lat和Long)发送到某些外部REST服务.
锁定设备后,它运行良好,持续了近15分钟.但之后它不会发送任何数据.
解锁设备后,它再次开始通过REST服务发送数据.
我的代码到目前为止
public class MainActivity extends AppCompatActivity {
private PendingIntent pendingIntent;
private PowerManager.WakeLock wakeLock;
public static final String USER_NAME = "USERNAME";
String username;
String password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent alarm = new Intent(this, AlarmReceiver.class);
boolean alarmRunning = (PendingIntent.getBroadcast(this, 0, alarm, PendingIntent.FLAG_NO_CREATE) != null);
if(alarmRunning == false) {
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarm, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 30000, pendingIntent);
}
PowerManager mgr = (PowerManager)this.getSystemService(Context.POWER_SERVICE);
wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"MyWakeLock");
wakeLock.acquire(); …Run Code Online (Sandbox Code Playgroud) 我有一个TextView和ListView我的活动.ListView最初设置为Visibility = gone我需要一个功能,如果用户点击TextView,ListView绑定并将显示为"Wrap_Content".到目前为止我已经编写了代码
我的XMl文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/txtDate"
android:textSize="50dp"
android:background="@color/colorSplash"
android:text="20-11-2016"/>
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/lstDesc"
android:visibility="gone" />
Run Code Online (Sandbox Code Playgroud)
Java代码
private void BindBookedList(){
final ArrayList<String> arr = new ArrayList<>();
arr.add("21-11-2016");
arr.add("22-11-2016");
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_collapse, arr){
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.list_collapse, …Run Code Online (Sandbox Code Playgroud) 我有一个包含调用者,被调用者fiels的数据集,我需要一些LINQ查询来操作此数据集等效于此sql查询
SELECT CASE
WHEN caller < callee THEN callee
ELSE caller
END AS caller1,
CASE
WHEN caller < callee THEN caller
ELSE callee
END AS caller2,
Count(*) AS [Count]
FROM YourTable
GROUP BY CASE
WHEN caller < callee THEN callee
ELSE caller
END,
CASE
WHEN caller < callee THEN caller
ELSE callee
END
Run Code Online (Sandbox Code Playgroud) 我正在使用以下查询
foreach (var callDetailsForNode_ReArrange in callDetailsForNodes_ReArrange)
{
var test = from r1 in dtRowForNode.AsEnumerable()
join r2 in dtFileRowForNode.AsEnumerable()
on r1.Field<int>("Lng_Upload_Id") equals r2.Field<int>("Lng_Upload_Id")
where ((r1.Field<string>("Txt_Called_Number") == callDetailsForNode_ReArrange.caller2.ToString()) || r1.Field<string>("Txt_Calling_Number") == callDetailsForNode_ReArrange.caller2.ToString())
select r2.Field<string>("Txt_File_Name");
var d = test.Distinct();
}
Run Code Online (Sandbox Code Playgroud)
此时此查询立即运行.但正如我补充道
string[] str =d.ToArray();
strFileName = string.Join(",", str);
Run Code Online (Sandbox Code Playgroud)
运行大约需要4-5秒.什么使它添加如此缓慢.ToArray()?
我有两个阵列说
var list1 = string[] {"1", "2", "3", "4", "", ""};
var list2 = string[] {"2", "3", "4","",""};
Run Code Online (Sandbox Code Playgroud)
当我尝试使用以下代码从这两个数组中获取常见项目
var listCommon = list1.Intersect(list2);
Run Code Online (Sandbox Code Playgroud)
它给了我这样的结果
string[] {"2", "3", "4", ""}
Run Code Online (Sandbox Code Playgroud)
但我希望它应该像这样返回
string[] {"2", "3", "4", "", ""}
Run Code Online (Sandbox Code Playgroud)
它在交叉时转义为最后一个空字符串值.
我正在使用excel.interop.object库9.0来操作我在c#中的xls文件
假设我有一张xls,有5张.所有床单都有一些行.
我正在使用以下代码从我的xls中的每个工作表中删除前2行
Excel.Application excelApp = new Excel.Application();
Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(mstrFilePath, 1, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, null, false);
try
{
Excel.Sheets excelWorkSheet = excelWorkbook.Sheets;
foreach (Excel.Worksheet work in excelWorkSheet)
{
Excel.Range range = work.get_Range("A1", "A3");
Excel.Range entireRow = range.EntireRow; // update
for (int i = 1; i <= 3; i++)
{
entireRow.Delete(Excel.XlDirection.xlUp);
}
}
//excelWorkbook.Close(false, mstrFilePath, null);
}
catch (Exception ex)
{
}
finally
{
excelApp.Quit();
}
Run Code Online (Sandbox Code Playgroud)
但是从表3中删除2行而不删除任何其他表中的任何行是行为不当.
这里出了什么问题?
我正在使用SqlBulkCopy类在表中一次插入50k行tbl_records
我After Insert在此表上设置了一个触发器并使用以下代码
SqlBulkCopy SqlBc1 = new SqlBulkCopy(strConnString, SqlBulkCopyOptions.FireTriggers);
// Set DataReader For SqlBulkCopy
sqlComm = new SqlCommand(strQuery, sqlTemCon);
sqlComm.CommandTimeout = 3600000;
sqlComm.CommandType = System.Data.CommandType.Text;
SqlDataReader dReader = sqlComm.ExecuteReader();
SqlBc1.WriteToServer(dReader);
Run Code Online (Sandbox Code Playgroud)
但执行前后.它只触发First 50k插入的行
我想它应该为每一行开火.我怎样才能做到这一点??
c# ×7
winforms ×5
linq ×3
android ×2
sql ×2
sql-server ×2
arrays ×1
dispose ×1
excel ×1
java ×1
listview ×1
performance ×1
sqlbulkcopy ×1
triggers ×1