小编Mik*_*son的帖子

如何从DateTime.ToString()中排除秒

我在Windows服务中使用DateTime.Now.ToString(),它给我的输出像"7/23/2010 12:35:07 PM"我想排除第二部分,只显示最多一分钟.

那么如何从那种格式中排除秒......?

c#

22
推荐指数
3
解决办法
3万
查看次数

构造函数中的SortedSet <T>和匿名IComparer <T>不起作用

为什么匿名函数作为方法的参数而不是构造函数参数?


如果我创建了一个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)

.net c# constructor anonymous-function

17
推荐指数
3
解决办法
9788
查看次数

检测AppData\LocalLow的位置

我正在尝试找到该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.它也为我的服务用户返回空白(至少在附加到进程时).

还有其他建议吗?

.net c#

12
推荐指数
1
解决办法
7166
查看次数

数据结构的最佳存储,以实现快速查找和持久性

脚本

我有以下方法:

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进行了测试.

  • 具有两列(userid,itemid)的表都是Int
  • 两列上的聚簇索引
  • 为180个用户添加了约800,000个项目 - 总计1.44亿行
  • 为SQL服务器分配4gb ram
  • 双核2.66ghz笔记本电脑
  • SSD磁盘
  • 使用SqlDataReader将所有itemid读入List
  • 遍历所有用户

如果我运行一个线程,它的平均值为0.2秒.当我添加第二个线程时,它会上升到0.4秒,这仍然可以.从那里开始,结果正在减少.添加第三个线程会带来很多查询,最多可达2个.第四个线程,最多4秒,第五个线程查询一些查询,最多50秒.

即使在一个线程上,CPU也在进行屋顶处理.我的测试应用程序需要一些由于快速循环,并sql其余.

这使我得出结论,它不会很好地扩展.至少不在我测试的硬件上.有没有办法优化数据库,比如存储每个用户的int数组而不是每个项目一个记录.但这使得删除项目变得更加困难.

[更新2010-03-31#2]

我使用相同的数据进行了快速测试,将其作为内存映射文件中的位.它表现得更好.六个线程产生的访问时间介于0.02s和0.06s之间.纯粹的记忆力.映射文件由一个进程映射,并由六个其他进程同时访问.并且由于sql base占用了4GB,磁盘上的文件占用了23mb.

.net c# sql-server memory-mapped-files data-structures

8
推荐指数
1
解决办法
2967
查看次数

在进行异步WCF调用时,首选哪种方式?

在异步调用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>更好地控制在检索结果之前或之后执行的内容.

使用一个优于另一个是否有任何优点或缺点?或者更优选哪种方式?

.net c# wcf asynchronous .net-4.0

7
推荐指数
1
解决办法
2610
查看次数

将控件添加到Office(VSTO)中的现有功能区组

我找到了很多关于如何将新组添加到现有功能区的示例,这很好用.

我无法弄清楚的是如何在现有功能区上向现有组添加新控件.假设我想将自己的命令添加到"查看"选项卡上的"校对"组中.

我正在VS2010中为Office2010开发这个,但我想同样的方法也适用于Office 2007.

任何指针或帮助都是值得赞赏的,或者如果不可能做到(没有太多黑客攻击),我也可以接受它.

.net c# vsto ms-office office-2010

6
推荐指数
1
解决办法
2719
查看次数

是否可以过滤“开放扩展”?

我打算决定开放扩展与模式扩展。

我知道可以过滤架构扩展,但是由于没有注册任何有效的tld,所以我最终得到一个难看的架构名称。这不是阻碍,只是一点刺激:)

我正在向组添加自定义元数据,并希望将查询限制为具有特定元数据值的所有组。使用Open Extensions可以做到吗?

我尝试使用的所有OData变体/groups?$filter=似乎都给出了错误。

microsoft-graph

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

将linq方法语法转换为查询语法

并不是说它会更好,但我试图让我的头脑转向以下方法语法来查询语法以查看差异.

long diskSpace = Directory.EnumerateDirectories(@"c:\")
                    .SelectMany(Directory.EnumerateFiles)
                    .Sum(fileSize => new FileInfo(fileSize).Length);
Run Code Online (Sandbox Code Playgroud)

.net c# linq

2
推荐指数
1
解决办法
1235
查看次数

滚动视图中的弹出窗口

在我的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)

你有任何想法或建议来解决这个问题吗?谢谢!

popover ipad ios

2
推荐指数
1
解决办法
2575
查看次数

从字符串中删除所有HTML格式

我想比较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# string

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