在搜索了stackoverflow.com之后,我发现了几个问题,询问如何删除重复项,但没有一个能解决速度问题.
在我的情况下,我有一个包含10列的表,其中包含500万个确切的行重复项.另外,我在10列中的9列中至少有一百万行具有重复.我目前的技术是(到目前为止)3个小时删除这500万行.这是我的过程:
-- Step 1: **This step took 13 minutes.** Insert only one of the n duplicate rows into a temp table
select
MAX(prikey) as MaxPriKey, -- identity(1, 1)
a,
b,
c,
d,
e,
f,
g,
h,
i
into #dupTemp
FROM sourceTable
group by
a,
b,
c,
d,
e,
f,
g,
h,
i
having COUNT(*) > 1
Run Code Online (Sandbox Code Playgroud)
下一个,
-- Step 2: **This step is taking the 3+ hours**
-- delete the row when all the non-unique columns are …
Run Code Online (Sandbox Code Playgroud) 我刚开始使用这么多数据(2000万行)而且我不知道在查询持续时间方面我应该期待什么:
update table set field = '1234'
Run Code Online (Sandbox Code Playgroud)
现场没有索引.这个声明花了25分钟.数据库设置为"简单恢复".25分钟似乎太长了吗?表有9列,小数据类型<50 varchar.
创建了一个泄漏内存的简单应用程序:
视图
<Page
...
x:Class="App3.MainPage"
mc:Ignorable="d">
<StackPanel>
<Image Width="300" Height="200"
Source="/Assets/BBlHOiv.jpg"></Image>
<Button Click="Button_Click">Navigate</Button>
</StackPanel>
</Page>
Run Code Online (Sandbox Code Playgroud)
代码背后
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
private void Button_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
this.Frame.Navigate(typeof(MainPage));
}
Run Code Online (Sandbox Code Playgroud)
每次单击该按钮时,代码都会导航到同一页面上,该页面上有一个图像~400KB.如果我继续快速单击按钮,则每次单击或几次单击都会使内存上升.内存不会被回收,或者至少不能及时回收.在真实的应用程序中,随着更复杂的页面和更复杂的导航(包括圆形导航),这可能成为一个大问题.问题是,如何强制应用程序释放内存?理想情况下,一旦不再需要/显示页面.
我试过以下的事情没有运气.
#1清除帧的导航堆栈
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
this.Frame.BackStack.Clear();
}
Run Code Online (Sandbox Code Playgroud)
#2使用MVVM时,将DataContext设置为null(在XAML标记中设置datacontext时)
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
this.DataContext = null;
this.Frame.BackStack.Clear();
}
Run Code Online (Sandbox Code Playgroud) 我需要在我的asp.net应用程序中启用缓存,但我不想使用webserver的内存来保存缓存对象.如果我为输出缓存添加页面指令,页面是否会存储在asp.net缓存对象中?
谢谢!
Multibinding是WPF中非常强大的功能,为什么Silverlight不支持它?他们从来没有为它添加支持?它太大了,不适合.NET框架?它会在Silverlight 5中出现吗?有谁知道答案?
谢谢!
我有一个方法,确定一个列的最小和最大DataTable
:
public void GetMinMaxRange( DataTable data, string valueColumnName )
{
var min = data.AsEnumerable().Min(m => m.Field<double>(valueColumnName));
var max = data.AsEnumerable().Max(m => m.Field<double>(valueColumnName));
}
Run Code Online (Sandbox Code Playgroud)
我想重构这个:
public void GetMinMaxRange( DataTable data, string valueColumnName )
{
DataColumn column = data.Columns[valueColumnName];
var min = data.AsEnumerable().Min(m => m.Field<column.DataType>(valueColumnName));
var max = data.AsEnumerable().Max(m => m.Field<column.DataType>(valueColumnName));
}
Run Code Online (Sandbox Code Playgroud)
我需要确定数据类型并使用它而不是硬编码m.Field<double>
.这该怎么做?
更新 至于我为什么要计算最小值和最大值之间的差异
public static double/decimal/int GetMinMaxRange<T>(DataTable data,
string valueColumnName) where T : IComparable<T>
{
DataColumn column = data.Columns[valueColumnName];
var min = data.AsEnumerable().Min(m => …
Run Code Online (Sandbox Code Playgroud) 需要计算每个学生的百分位数(第1至第99百分位数),并获得单个测试的分数.
我对NTILE的msdn定义感到有些困惑,因为它没有明确提到百分等级.我需要某种保证NTILE是用于计算百分等级的正确关键字.
declare @temp table
(
StudentId int,
Score int
)
insert into @temp
select 1, 20
union
select 2, 25
.....
select NTILE(100) OVER (order by Score) PercentileRank
from @temp
Run Code Online (Sandbox Code Playgroud)
它看起来对我来说是正确的,但这是计算百分等级的正确方法吗?
在using
下面打,我不想竟然打的外部资源.我想测试someResult
和使用它的代码,但每次我运行我的单元测试时,这段代码仍然试图点击真正的Web服务.我如何使用moq伪造对Web服务的真实调用,但不使用模拟其他代码?
public IMyInterface.SomeMethod()
{
// hits a web service
using ( mySoapClient client = new mySoapClient() )
{
var someResult = client.DoSomething();
...
...
}
}
[TestMethod()]
public void SomeMethodTest()
{
IMyInterface target = new MyInterface();
target.SomeMethod();
// Assert....
}
Run Code Online (Sandbox Code Playgroud) 在VS 2010中,我可以右键单击一个方法,让MSTest为我创建一个单元测试.VS2012 pro中的这个功能在哪里?
c# ×3
sql-server ×3
sql ×2
unit-testing ×2
asp.net ×1
asp.net-4.0 ×1
caching ×1
etl ×1
generics ×1
moq ×1
multibinding ×1
objectscript ×1
silverlight ×1
t-sql ×1
windows-10 ×1
wpf ×1
xaml ×1