提供items
q LINQ表达式的结果:
var items = from item in ItemsSource.RetrieveItems()
where ...
Run Code Online (Sandbox Code Playgroud)
假设每个项目的生成需要一些不可忽略的时间.
有两种操作模式:
使用foreach
将允许开始使用集合开头的项目,而不是最终可用的项目.但是,如果我们想稍后再次处理相同的集合,我们将不得不复制保存它:
var storedItems = new List<Item>();
foreach(var item in items){
Process(item);
storedItems .Add(item);
}
// Later
foreach(var item in storedItems){
ProcessMore(item);
}
Run Code Online (Sandbox Code Playgroud)
因为如果我们刚刚制作的foreach(... in items)
话temsSource.RetrieveItems()
会再次被召唤.
我们可以直接使用.ToList()
,但这会迫使我们等待最后一项检索,然后才能开始处理第一项.
问题:是否有一个IEnumerable
实现会像常规的LINQ查询结果一样首次迭代,但会在进程中实现,以便第二次foreach
迭代存储的值?
我想知道有没有办法防止enum
重复键编译?
例如,enum
下面将编译
public enum EDuplicates
{
Unique,
Duplicate = 0,
Keys = 1,
Compilation = 1
}
Run Code Online (Sandbox Code Playgroud)
虽然这段代码
Console.WriteLine(EDuplicates.Unique);
Console.WriteLine(EDuplicates.Duplicate);
Console.WriteLine(EDuplicates.Keys);
Console.WriteLine(EDuplicates.Compilation);
Run Code Online (Sandbox Code Playgroud)
会打印
Duplicate
Duplicate
Keys
Keys
Run Code Online (Sandbox Code Playgroud) 我是一名称职的C#程序员,也是PowerShell的新手.到底有什么好处呢?它更像是程序员的工具还是管理员?
请分享您的经验.何时使用.NET程序集编写脚本比使用C#工具更容易?你用它做什么真正的生产任务?
也许问题应该是:与C#相比有什么好处,而不是批处理?
我有一个元素定位在Canvas
使用附加属性Canvas.Top
和Canvas.Left
.然后使用动画将元素移动到不同的坐标集,如下所示:
DoubleAnimation left = new DoubleAnimation( oldLeft, newLeft );
DoubleAnimation top = new DoubleAnimation( oldTop, newTop );
element.BeginAnimation( Canvas.LeftProperty, left );
element.BeginAnimation( Canvas.TopProperty, top );
Run Code Online (Sandbox Code Playgroud)
有没有办法在任何时候Canvas.Top
或Canvas.Left
更改时接收事件?优选地与动画无关.
我需要一种方法来扩展远程机器上的环境变量.
假设我有一个文件夹的路径,%appdata%\MyApp\Plugins
或者%ProgramFiles%\MyCompany\MyApp\Plugins
我想列出该文件夹中的文件以进行审计.唯一的问题是我想在远程计算机上执行此操作,但我有管理员访问权限.
一个额外的问题(但不是必不可少的)是如何为远程机器上的给定用户执行此操作?
我有一个应用程序,处理大量的小对象,例如每秒2000条消息.一条消息大约是100字节,可能更少.应用程序运行在负载下6个半小时,在这段时间它有264 416 0 个根的集合,166 699 1 第一根和69 608 2 次根.这是每秒11.6,7.3和3个集合.
问题是如何减少垃圾收集频率?
UPD: 应用程序是一个从WCF接收消息的服务器,通过几个处理模块将它们保存到数据库中.
我的印象是GC应该在一段时间后适应并增加发电量,但事实并非如此.
UPD 2:正如leppie的回答所建议的那样,服务器模式下的 GC确实减少了10倍的收集.而且,正如Richter所描述的那样,频繁的收藏并不是一件坏事.
我的python脚本可以产生一个无限期运行的进程吗?
我不太熟悉python,也不熟悉产生deamons,所以我想到了这个:
si = subprocess.STARTUPINFO()
si.dwFlags = subprocess.CREATE_NEW_PROCESS_GROUP | subprocess.CREATE_NEW_CONSOLE
subprocess.Popen(executable, close_fds = True, startupinfo = si)
Run Code Online (Sandbox Code Playgroud)
该过程继续运行python.exe,但是一关闭cmd窗口就会关闭.
.NET中有一些属性(例如ObsoleteAttribute
),它们能够阻止编译或至少抛出编译时警告,具体取决于它们的配置.
如何编写能够干扰编译的属性?有没有办法从微软以外的地方做到这一点?
我有一个类需要知道当前有效的用户名.Environment.UserName
或是WindowsIdentity.GetCurrent().Name
为了那个.但是当启用模拟时,它们返回的LocalUser
名称不是ImpersonatedUser
名称.
如何获取当前模拟用户的姓名?
该应用程序是C#控制台应用程序,我知道模仿是有效的,因为我获得了特权ImpersonatedUser
.当然,我可以使用模拟代码将模拟的用户名保存到某个全局变量,但这样做是错误的.
更新:
模拟代码:
if (LogonUser(userName, domain, password, LOGON32_LOGON_NEW_CREDENTIALS/*=9*/, LOGON32_PROVIDER_DEFAULT, ref token) != 0)
{
if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)
{
WindowsIdentity tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
_impersonationContext = tempWindowsIdentity.Impersonate();
// WindowsIdentity.GetCurrent().Name equals "LocalUser"
// while userName equals "ImpersonatedUser"
...
Run Code Online (Sandbox Code Playgroud)
我可以控制模拟代码,但我更愿意将其与解决方案的其他部分保持独立.
我发现自己处于需要将多个谓词合并为一个的情况.有没有一种标准的方法来实现这一点,类似于compliment
?
假设有几个简单谓词(例如is-fruit-p
,is-red-p
,grows-on-trees-p
等),并从其中的一个子集必须使用多于一个的谓词被过滤出的对象的列表.实现这一目标的最佳方法是:
(remove-if #'is-fruit-p
(remove-if #'is-red-p
(remove-if #'grows-on-trees-p list-of-objects)))
Run Code Online (Sandbox Code Playgroud) 我需要从一个数据库复制大型结果集并将其保存到另一个数据库.
存储过程用于获取和存储,因为在保存期间涉及某些逻辑.
我试图找到一个高效的解决方案,我无法将整个数据集保存在内存中,我想尽量减少往返次数.
从源表读取数据
var reader = fetchCommand.ExecuteReader();
while (reader.Read()){...}
Run Code Online (Sandbox Code Playgroud)
有没有办法将这些数据插入另一个sqlCommand,而无需将整个数据集加载到一个DataTable
但没有插入一行的数据?
Sqlserver是源数据库和目标数据库上的MS SQL Server 2008.数据库位于不同的服务器上.不能使用SSIS或链接服务器.
编辑: 似乎可以使用表值参数将行流式传输到存储过程中.也将研究这种方法.
更新:
是的,可以将数据流出command.ExecuteReader
到另一个命令,如下所示:
var reader = selectCommand.ExecuteReader();
insertCommand.Parameters.Add(
new SqlParameter("@data", reader)
{SqlDbType = SqlDbType.Structured}
);
insertCommand.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)
insertCommand
带有表值参数的存储过程在哪里@data
.
所以我有一个表有三列- col1
,col2
和col3
.我需要选择那些col1
共享行的值,只有一个col2
和的组合col3
.在理想的世界里,我会这样写:
SELECT col1 FROM table
GROUP BY col1
HAVING COUNT(DISTINCT(col2, col3)) = 1
Run Code Online (Sandbox Code Playgroud)
如何在现实世界中做到这一点?
到目前为止,我有两个解决方案-通过组col1
和col2
和col1
和col3
他们加入的结果; 或者按所有三个分组,然后分组col1
.不幸的是,我得到(非常)不同的数量.
该数据库位于SQL Server 2005上.
.net ×7
c# ×6
sql-server ×2
attributes ×1
bulkinsert ×1
canvas ×1
common-lisp ×1
daemon ×1
enums ×1
functor ×1
ienumerable ×1
lambda ×1
linq ×1
lisp ×1
powershell ×1
python ×1
scripting ×1
sql ×1
windows ×1
wpf ×1