我在Windows服务中使用DateTime.Now.ToString(),它给我的输出像"7/23/2010 12:35:07 PM"我想排除第二部分,只显示最多一分钟.
那么如何从那种格式中排除秒......?
为什么匿名函数作为方法的参数而不是构造函数参数?
如果我创建了一个List<string>,它有一个带有以下签名的Sort方法:
public void Sort(IComparer<T> comparer)
Run Code Online (Sandbox Code Playgroud)
以下工作地点:
List<string> list = new List<string>();
list.Sort( (a,b) => a.CompareTo(b) );
Run Code Online (Sandbox Code Playgroud)
SortedSet有一个具有类似签名的构造函数:
public SortedSet(IComparer<T> comparer)
Run Code Online (Sandbox Code Playgroud)
但是在构造函数中使用匿名函数时会失败.以下内容无效:
SortedSet<string> set = new SortedSet<string>( (a, b) => a.CompareTo(b) );
Run Code Online (Sandbox Code Playgroud)
创建排序类可以正常工作:
public class MyComparer : IComparer<string>
{
public int Compare(string a, string b)
{ return a.CompareTo(b); }
}
SortedSet<string> set = new SortedSet<string>( new MyComparer() );
Run Code Online (Sandbox Code Playgroud) 我正在尝试找到该AppData\LocalLow文件夹的路径.
我找到了一个使用的例子:
string folder = "c:\users\" + Environment.UserName + @"\appdata\LocalLow";
Run Code Online (Sandbox Code Playgroud)
这对于一个被绑定到c:和users这似乎有点脆弱.
我试着用
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
Run Code Online (Sandbox Code Playgroud)
但这给了我AppData\Local,由于应用程序运行的安全限制,我需要LocalLow.它也为我的服务用户返回空白(至少在附加到进程时).
还有其他建议吗?
脚本
我有以下方法:
public void AddItemSecurity(int itemId, int[] userIds)
public int[] GetValidItemIds(int userId)
Run Code Online (Sandbox Code Playgroud)
最初我在考虑存储在表单上:
itemId -> userId, userId, userId
Run Code Online (Sandbox Code Playgroud)
和
userId -> itemId, itemId, itemId
Run Code Online (Sandbox Code Playgroud)
AddItemSecurity基于我如何从第三方API获取数据,GetValidItemIds我是如何在运行时使用它的.
可能有2000个用户和1000万个项目.项目ID在表格上:2007123456,2010001234(前10位代表年份的10位数字).
AddItemSecurity不必执行超快,但GetValidIds需要亚秒.此外,如果现有更新,itemId我需要为列表中不再包含的用户删除该itemId.
我正在考虑如何以最佳方式存储它.最好在磁盘上(带缓存),但我希望代码可维护和清洁.
如果项目id从0开始,我考虑MaxItemId / 8为每个用户创建一个字节数组长度,如果项目存在与否则设置一个真/假位.这将限制每个用户的阵列长度超过1mb,并提供快速查找以及更新每个用户列表的简便方法.通过使用.Net 4框架将其作为内存映射文件持久化,我认为我也可以获得不错的缓存(如果机器有足够的RAM),而不是自己实现缓存逻辑.解析id,剥离年份,每年存储一个阵列可能是一个解决方案.
ItemId - > UserId []列表可以直接序列化到磁盘并使用法线FileStream进行读/写,以便持久保存列表并在发生更改时进行区分.
每次添加新用户时,所有列表也必须更新,但这可以在每晚完成.
题
我应该继续尝试这种方法,还是应该探索其他途径?我认为SQL服务器执行速度不够快,而且会产生开销(至少如果它托管在不同的服务器上),但我的假设可能是错误的.任何关于此事的想法或见解都表示赞赏.我想尝试解决它而不添加太多硬件:)
[更新2010-03-31]
我现在已经在以下条件下使用SQL Server 2008进行了测试.
如果我运行一个线程,它的平均值为0.2秒.当我添加第二个线程时,它会上升到0.4秒,这仍然可以.从那里开始,结果正在减少.添加第三个线程会带来很多查询,最多可达2个.第四个线程,最多4秒,第五个线程查询一些查询,最多50秒.
即使在一个线程上,CPU也在进行屋顶处理.我的测试应用程序需要一些由于快速循环,并sql其余.
这使我得出结论,它不会很好地扩展.至少不在我测试的硬件上.有没有办法优化数据库,比如存储每个用户的int数组而不是每个项目一个记录.但这使得删除项目变得更加困难.
[更新2010-03-31#2]
我使用相同的数据进行了快速测试,将其作为内存映射文件中的位.它表现得更好.六个线程产生的访问时间介于0.02s和0.06s之间.纯粹的记忆力.映射文件由一个进程映射,并由六个其他进程同时访问.并且由于sql base占用了4GB,磁盘上的文件占用了23mb.
在异步调用WCF服务时,似乎有两种方法可以完成.
1.
WcfClient _client = new WcfClient();
public void One()
{
_client.BegindoSearch("input", ResultOne, null);
}
private void ResultOne(IAsyncResult ar)
{
string data = _client.EnddoSearch(ar);
}
Run Code Online (Sandbox Code Playgroud)
2.
public void Two()
{
WcfClient client = new WcfClient();
client.doSearchCompleted += TwoCompleted;
client.doSearchAsync("input");
}
void TwoCompleted(object sender, doSearchCompletedEventArgs e)
{
string data = e.Result;
}
Run Code Online (Sandbox Code Playgroud)
对于新Task<T>类,我们通过将同步操作包装在任务中,可以轻松实现第三种方法.
3.
public void Three()
{
WcfClient client = new WcfClient();
var task = Task<string>.Factory.StartNew(() => client.doSearch("input"));
string data = task.Result;
}
Run Code Online (Sandbox Code Playgroud)
它们都使您能够在等待结果时执行其他代码,但我认为可以Task<T>更好地控制在检索结果之前或之后执行的内容.
使用一个优于另一个是否有任何优点或缺点?或者更优选哪种方式?
我找到了很多关于如何将新组添加到现有功能区的示例,这很好用.
我无法弄清楚的是如何在现有功能区上向现有组添加新控件.假设我想将自己的命令添加到"查看"选项卡上的"校对"组中.
我正在VS2010中为Office2010开发这个,但我想同样的方法也适用于Office 2007.
任何指针或帮助都是值得赞赏的,或者如果不可能做到(没有太多黑客攻击),我也可以接受它.
我打算决定开放扩展与模式扩展。
我知道可以过滤架构扩展,但是由于没有注册任何有效的tld,所以我最终得到一个难看的架构名称。这不是阻碍,只是一点刺激:)
我正在向组添加自定义元数据,并希望将查询限制为具有特定元数据值的所有组。使用Open Extensions可以做到吗?
我尝试使用的所有OData变体/groups?$filter=似乎都给出了错误。
并不是说它会更好,但我试图让我的头脑转向以下方法语法来查询语法以查看差异.
long diskSpace = Directory.EnumerateDirectories(@"c:\")
.SelectMany(Directory.EnumerateFiles)
.Sum(fileSize => new FileInfo(fileSize).Length);
Run Code Online (Sandbox Code Playgroud) 在我的iPad应用程序中,我在滚动视图中使用带有箭头的弹出按钮.它工作正常,但当我滚动视图,然后点击按钮,带箭头的弹出窗口不跟随按钮,它打开它的原始位置.
我用这个代码:
(void)showHomePopupAction:(id)sender {
self.popHome = [[[PopHome alloc] initWithNibName:@"PopHome" bundle:[NSBundle mainBundle]] autorelease];
popHome.contentSizeForViewInPopover = CGSizeMake(popHome.view.frame.size.width, popHome.view.frame.size.height);
self.popoverController = [[[UIPopoverController alloc] initWithContentViewController:popHome] autorelease];
[self.popoverController presentPopoverFromRect:popoverButtonForHome.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
你有任何想法或建议来解决这个问题吗?谢谢!
我想比较2个字符串,但我只是意识到已经有一些html格式.
在执行string1 == string2时,如何让这两个字符串匹配.(注意:我不知道HTML格式是什么会提前)
string1 = "This is a test";
string1 = "<font color=\"black\" size=\"1\">This is a test</font>";
Run Code Online (Sandbox Code Playgroud) c# ×8
.net ×6
.net-4.0 ×1
asynchronous ×1
constructor ×1
ios ×1
ipad ×1
linq ×1
ms-office ×1
office-2010 ×1
popover ×1
sql-server ×1
string ×1
vsto ×1
wcf ×1